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

  • 本文关键字:多列显示 选择 MYSQL 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文件。

这可以在MySQL中完成,但几乎可以肯定的是,在您的应用程序框架中更容易完成。无论如何,如果所有deviceId值在表中具有相同的行数(或者如果T01>=T02>= 的值数为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,则必须对上述查询中的三个子查询进行FULL OUTER JOIN,MySQL不直接支持。这个问题可以指出你如何做到这一点。

SQLFiddle 演示