MYSQL-在选择和分组依据中将多列显示为不同的值

时间:2018-09-28 07:10:20

标签: mysql

当我运行此查询时,

select deviceId,value from table group by deviceId;

deviceId    value
T01         50
T01         60  
T01         65
T01         32
T02         34
T02         30  
T02         22
T02         15
T03         70
T03         78  
T03         80
T03         89

但是我需要如下输出,

T01 T02 T03
50  34  70
60  30  78
65  22  80
32  15  89

如何使用mysql查询实现此目标?

这样做的原因是,我想像这样将数据写入excel文件。

1 个答案:

答案 0 :(得分:1)

这可以在MySQL中完成,但几乎可以肯定,在您的应用程序框架中更容易完成。无论如何,如果所有的deviceId值在表中都具有相同的行数(或者T01> = T02> = { {1}},此查询将为您提供所需的结果,尽管应注意,不能保证输出中数据的顺序。该查询将人工行号分配给每个T03值,然后在该行号上将每个deviceId的值集联接起来:

deviceId

输出:

SELECT t01, t02, t03
FROM (SELECT value AS t01, @rn1 := @rn1+1 AS rn
      FROM table1 t1
      JOIN (SELECT @rn1 := 0) rn1
      WHERE deviceId = 'T01'
      ORDER BY rn) t1
LEFT JOIN (SELECT value AS t02, @rn2 := @rn2+1 AS rn
           FROM table1 t2
           JOIN (SELECT @rn2 := 0) rn1
           WHERE deviceId = 'T02'
           ORDER BY rn) t2 ON t2.rn = t1.rn
LEFT JOIN (SELECT value AS t03, @rn3 := @rn3+1 AS rn
           FROM table1 t1
           JOIN (SELECT @rn3 := 0) rn1
           WHERE deviceId = 'T03'
           ORDER BY rn) t3 ON t3.rn = t1.rn

如果t01 t02 t03 50 34 70 60 30 78 65 22 80 32 15 89 的值多于T02,或者T01的值多于T03,则您必须对以下三个子查询执行T02以上查询,这是MySQL不直接支持的。 This question可以指出您的操作方式。

SQLFiddle Demo