如何解决SQL-每列的条件
这是一个通用的SQL问题,但是我是否必须知道数据库是Firebird。 我有这张桌子(简体): 用户金额类型 -------------------- 约翰25积分 约翰20笔付款 约翰5借记 约翰15积分 迈克15点数 我希望使用单个查询获得如下所示的结果: 用户信用借记 -------------------- 约翰40 25 迈克15空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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。