SQL - где условие для каждого столбца
-
09-09-2020 - |
Вопрос
Это общий вопрос SQL, но я, если вы должны знать, что база данных - это Firebird.
У меня есть эта таблица (упрощенная):
user amount type -------------------- john 25 credit john 20 debit john 5 debit john 15 credit mike 15 credit.
Я хочу иметь результат, который выглядит так, используя один запрос:
user credit debit -------------------- john 40 25 mike 15 NULL.
Where credit = SUM(amount) WHERE type=credit
and debit = SUM(amount) WHERE type=debit
.
в основном я хочу иметь несколько полей на результатах на основе суммы поля (в данном случае), но в разных условиях (в этом случае типом).
заранее спасибо за любые предложения.
Решение
Стандартный SQL будет:
SELECT "user",
SUM(CASE WHEN type='credit' then amount END) as Credit,
SUM(CASE WHEN type='debit' then amount END) as Debit
FROM
"table"
GROUP BY
"user"
. Другие советы
Я не уверен, как Firebird делает это, но вы можете сделать что-то вроде:
SELECT user,
sum(SELECT amount FROM table AS t2 WHERE t2.user = t1.user AND type="credit" ) AS credit,
sum(SELECT amount FROM table AS t3 WHERE t3.user = t1.user AND type="debit" ) AS debit
FROM table AS t1
GROUP BY user
ORDER BY user
.
Я ссылаюсь на то, что я думаю, что это будет в PostgreSQL, в случае, если это поможет вам найти то, что вам нужно.
Попробуйте:
SELECT credit.user_name, credit.cre, debit.deb
FROM (SELECT user_name, SUM(amount) cre FROM t WHERE TYPE = 'credit' GROUP BY user_name) credit
LEFT OUTER JOIN (SELECT user_name, SUM(amount) deb
FROM t
WHERE TYPE = 'debit'
GROUP BY user_name) debit
ON (credit.user_name = debit.user_name)
. Не связан с StackOverflow