SQL转换行中的列

时间:2018-08-03 11:03:33

标签: sql database mysqli pivot

我要转换此表(阅读):

ID TimeTable_ID reading_Value Sensor_ID 1 1 482 1 2 1 153 2 3 1 152 3 4 1 781 4 5 2 156 1 6 2 842 2 7 2 157 3 8 2 453 4

对此:

TimeTable_ID Sensor_1 Sensor_2 Sensor_3 Sensor_4 1 482 153 152 781 2 156 842 157 453

我的尝试:

SELECT * 
FROM (SELECT TimeTable_ID, reading_Value 
      FROM Reading
     ) AS BaseData PIVOT 
     (COUNT(reading_Value) FOR TimeTable_ID IN ([Sensor_1], [Sensor_2], [Sensor_3], [Sensor_4])
     ) AS PivotTable;   

但不起作用。

2 个答案:

答案 0 :(得分:2)

MySQL不支持PIVOT运算符。但是,您可以改用标准数据透视查询:

SELECT
    TimeTable_ID,
    MAX(CASE WHEN Sensor_ID = 1 THEN reading_Value END) AS Sensor_1,
    MAX(CASE WHEN Sensor_ID = 2 THEN reading_Value END) AS Sensor_2,
    MAX(CASE WHEN Sensor_ID = 3 THEN reading_Value END) AS Sensor_3,
    MAX(CASE WHEN Sensor_ID = 4 THEN reading_Value END) AS Sensor_4
FROM Reading
GROUP BY TimeTable_ID;

答案 1 :(得分:0)

如果您的Sensor数量有限,则可以:

select TimeTable_ID, 
       sum(case when Sensor_ID = 1 then reading_Value else 0 end) as Sensor_1,
       . . . 
       sum(case when Sensor_ID = 4 then reading_Value else 0 end) as Sensor_4 
from reading r
group by TimeTable_ID;