SELECT
a.id id,
a.site site,
t.date date_,
CASE WHEN (t.type = 13) THEN round(sum(t.d * t.fx), 2) END debit,
CASE WHEN (t.type = 13) THEN round(sum(t.c * t.fx), 2) END credit,
CASE WHEN (t.type = 9) THEN round(sum(t.c * t.fx), 2) ELSE 0 END bonus
FROM
r.trans t,
r.accs a
WHERE
t.id = a.id AND
t.stype = 444
GROUP BY
a.id
Моей ошибкой было, что я не упомянул CASE. В этом случае мне нужна сортировка только по a.id (в крайнем случае с a.site). Но запрос требует группировки по t.date, t.type, что нужно избежать всеми способами.
Дмитрий Шицков, цель - склеить лишь по одной колонке (которая в GROUP BY). Использование всех колонок в GROUP BY грозит неправильной группировкой. Представим что представления представляют собой транзакции. В acc_value будут суммы, в acc_name будут типы транзакций, а в acc_id ИД пользователя. Мне нужна группировка по acc_id, чтобы узнать сколько транзакций вообще совершил данный пользователь.
И вот в первом представлении я получаю такие данные:
Мне нужно узнать общее количество сумм во втором представлении. Конечно, именно эту задачу выполнить легко с помощью WHERE, но в моём реальном случае нужна группировка по одной лишь колонке, ибо массив данных пользователей, типов итд. гораздо больше и разнообразней.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Моей ошибкой было, что я не упомянул CASE. В этом случае мне нужна сортировка только по a.id (в крайнем случае с a.site). Но запрос требует группировки по t.date, t.type, что нужно избежать всеми способами.