当我运行此查询时,
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文件。
答案 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可以指出您的操作方式。