我有一张这样的表:
------------------------------------------------------
ID | Date | ClientName | TransactionAmount |
------------------------------------------------------
1 | 6/16/13 | C1 | 15 |
------------------------------------------------------
2 | 6/16/13 | C1 | 10 |
------------------------------------------------------
3 | 6/16/13 | C2 | 10 |
------------------------------------------------------
4 | 6/17/13 | C2 | 20 |
------------------------------------------------------
我想得到这样的东西:
------------------------------------------------------------------------
Date | C1_Total_Amount_Transacted | C2_Total_Amount_Transacted |
------------------------------------------------------------------------
6/16/13 | 25 | 10 |
------------------------------------------------------------------------
6/17/13 | 0 | 20 |
在第二个表中Date也是唯一的我在数据库中有x个客户端 结果表将有x + 1列(每个客户1个前置日期和x个列)。
可能需要编写一些PHP代码和更多查询,任何有效的解决方案 非常完美,我不需要完整的SQL解决方案。
由于
答案 0 :(得分:2)
我认为你是SQL新手。这种类型的查询需要条件求和。在SQL中表达很容易:
select `date`,
sum(case when Client_Name = 'C1' then TransactionAmount else 0 end) as C1,
sum(case when Client_Name = 'C2' then TransactionAmount else 0 end) as C2
from t
group by `date`
但是,您必须在查询中列出每个客户端。您始终必须为SQL查询指定确切的列标题。如果您不了解它们,则需要将SQL创建为字符串,然后单独执行。这是一个相当麻烦的过程。
您可以使用group_concat()
来解决这个问题。这会将值放在一个列中,并使用您选择的分隔符(默认为逗号):
select `date`, group_concat(amount)
from (select `date`, ClientName, sum(TransactionAmount) as amount
from t
group by `date`, ClientName
) t
group by `date`