mysql查询组函数作为列

时间:2014-10-15 12:05:10

标签: mysql

我需要编写一个查询来计算每个帐户的总和,但我想要的特殊之处是将每个月的部分借记分组为一列。

所以我需要的是这个例子:

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

用户选择日期,因此列数不受限制 有没有办法做到这一点或没有?感谢您的任何评论或回答。

1 个答案:

答案 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:您将日期视为字符串,我保持这种逻辑。但这不是一个好习惯