我需要编写一个查询来计算每个帐户的总和,但我想要的特殊之处是将每个月的部分借记分组为一列。
所以我需要的是这个例子:
SELECT accid "Account ID", Left(tr_date,7) "Date", SUM(debit) "Debit Sum"
FROM transactions
WHERE tr_date Between "2014-07-01" and "2014-09-30"
GROUP BY acc_id, LEFT(tr_date,7);
结果将是这样的:
Account ID Date Debit Sum
1111 2014-07 300
1111 2014-08 351
1111 2014-09 352
1123 2014-07 500
1123 2014-08 100
1123 2014-09 230
但我要求的是以下结果:
Account ID 2014-07 2014-08 2014-09
1111 300 351 352
1123 500 100 230
用户选择日期,因此列数不受限制 有没有办法做到这一点或没有?感谢您的任何评论或回答。
答案 0 :(得分:2)
这样做的唯一方法是事先知道日期。
SELECT accid "Account ID"
SUM(if(LEFT(tr_date,7)="2014-07",debit,0)) "2014-07"
SUM(if(LEFT(tr_date,7)="2014-08",debit,0)) "2014-09"
SUM(if(LEFT(tr_date,7)="2014-09",debit,0)) "2014-08"
FROM transactions
WHERE tr_date Between "2014-07-01" AND "2014-09-30"
GROUP BY acc_id
如果您需要用户能够选择或添加列,则您需要使用存储过程或其他脚本语言以语音方式构建查询。
PD:您将日期视为字符串,我保持这种逻辑。但这不是一个好习惯