我有一个这样的表:
------------------------------------------------------
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 |
在第二个表中,如果数据库中有x个客户端,Date也是唯一的结果表将有x + 1列(1列用于日期前,x列用于每个客户端)。
可能需要编写一些PHP代码和更多的查询,任何可行的解决方案我不需要一个完整的SQL解决方案。
谢谢
我认为您对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`