2

这是一个一般的 SQL 问题,但如果你必须知道数据库是 Firebird。

我有这张表(简化):

用户量类型
--------------------
约翰 25 学分
约翰 20 借记卡
约翰 5 借记卡
约翰 15 学分
迈克 15 学分

我希望使用单个查询得到一个看起来像这样的结果:

用户贷记借记
--------------------
约翰 40 25
迈克 15 空
Where credit = SUM(amount) WHERE type=credit
   and debit = SUM(amount) WHERE type=debit

基本上,我希望根据字段的总和(在本例中为数量)但在不同的条件下(在本例中为类型)在结果上具有多个字段。

在此先感谢您的任何建议。

4

3 回答 3

8

标准 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"
于 2011-05-23T14:55:02.203 回答
2

我不确定 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 中的内容,以防万一可以帮助您找到所需的内容。

于 2011-05-23T14:33:39.447 回答
0

试试这个 :

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)
于 2011-05-23T14:35:44.563 回答