如何使用php重新排列以下数据?

时间:2010-02-12 06:00:01

标签: php sql mysql

我使用mysql的SQL查询

检索了以下数据
TOTAL   COMPUTER        DATE        GROUP  
-----------------------------------------------
48      LAPTOP2     2009-08-19      1  
77      LAPTOP2     2009-08-20      1  
0       LAPTOP2     2009-08-21      1  
15      LAPTOP1     2009-08-19      1  
25      MAIN        2009-08-23      1  
25      LAP3        2009-08-18      2  
3       LAP3        2009-08-19      2  
55      LAP3        2009-08-20      2 

我想像使用php重新排列数据

group   computer    2009-08-18  2009-08-19   2009-08-20  2009-08-21  2009-08-22 2009-08-23  
------------------------------------------------------------------------------------------------
1       LAPTOP2      0          48            77         0           0          0  
1       LAPTOP1      0          15            0          0           0          0  
1       MAIN                                                                    25  
2       LAP3         25          3            55         0           0          0  

1 个答案:

答案 0 :(得分:1)

使用以下查询来透视数据:

  SELECT t.group,
         t.computer,
         MAX(CASE WHEN t.date = '2009-08-18' THEN t.total ELSE 0 END) AS '2009-08-18',
         MAX(CASE WHEN t.date = '2009-08-19' THEN t.total ELSE 0 END) AS '2009-08-19',
         MAX(CASE WHEN t.date = '2009-08-20' THEN t.total ELSE 0 END) AS '2009-08-20'
         --, etc...
    FROM TABLE t
GROUP BY t.group, t.computer

您可以选择为要转动的数据定义每列,也可以使用MySQL's Prepared Statement syntax动态创建这些列。

我觉得有必要指出您的示例不一致 - 对于LAPTOP2,您的2009-08-18值为零,但main的值为空。也没有该日期的记录。如果您希望这些显示为空白/等,请在ELSE 0 END语句中将ELSE NULL END更改为CASE