在SQL中选择列值作为列标题?

时间:2013-06-16 15:50:45

标签: php mysql sql phpmyadmin

我有一张这样的表:

------------------------------------------------------
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解决方案。

由于

1 个答案:

答案 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`
相关问题