0

我有一张这样的桌子:

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

谢谢

4

1 回答 1

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`
于 2013-06-16T16:03:59.450 回答