Php 选择列值作为SQL中的列标题?
我有一张这样的桌子:Php 选择列值作为SQL中的列标题?,php,mysql,sql,phpmyadmin,Php,Mysql,Sql,Phpmyadmin,我有一张这样的桌子: ------------------------------------------------------ ID | Date | ClientName | TransactionAmount | ------------------------------------------------------ 1 | 6/16/13 | C1 | 15 | -------------------
------------------------------------------------------
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 |
我想得到这样的东西:
------------------------------------------------------
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个客户端
结果表将有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\u concat()
来解决这个问题。这会将值放在一列中,并使用您选择的分隔符(默认值为逗号):
你试过什么吗?如果你表现出良好的尝试,并证明自己的困境(而不仅仅是要求一个完整的解决方案),你可能会得到更好的答案。