代码之家  ›  专栏  ›  技术社区  ›  Suriyan Suresh

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

  •  0
  • Suriyan Suresh  · 技术社区  · 16 年前

    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 回复  |  直到 16 年前
        1
  •  1
  •   OMG Ponies    16 年前

    使用以下查询透视数据:

      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 其值为空。两人都没有那一天的记录。如果要将这些显示为空白/etc,请更改 ELSE 0 END ELSE NULL END CASE 声明。

    推荐文章