2013-11-14 48 views
0

从这段代码可以得出,对于locationid 5,6,7,8,它将在第二行而不是它继续?将行转换为mysql v3中的列

SELECT 
    MAX(case when locationid = '1' then floatvalue end) Flow, 
    MAX(case when locationid = '2' then floatvalue end) Level, 
    MAX(case when locationid = '3' then floatvalue end) Pressure, 
    MAX(case when locationid = '4' then floatvalue end) MR, 
    MAX(case when locationid = '5' then floatvalue end) Flow, 
    MAX(case when locationid = '6' then floatvalue end) Level, 
    MAX(case when locationid = '7' then floatvalue end) Pressure, 
    MAX(case when locationid = '8' then floatvalue end) MR 
FROM table 

因此,不是这样的:

Flow | Level | Pressure | MR | Flow | Level | Pressure | MR | 
10 | 20 | 30  | 40 | 100 | 200 | 300 | 400 | 

它会是这样的:

Flow | Level | Pressure | MR | 
10 | 20 | 30  | 40 | 
100 | 200 | 300 | 400 | 
+0

没有。你不能在sql中写一些能从一个记录生成两条记录的东西。如果你想显示两行,那么把这个逻辑放到客户端软件中。 –

回答

1

您正在寻找这样的事情?

SELECT MAX(CASE WHEN locationid = 1 THEN floatvalue END) Flow, 
     MAX(CASE WHEN locationid = 2 THEN floatvalue END) Level, 
     MAX(CASE WHEN locationid = 3 THEN floatvalue END) Pressure, 
     MAX(CASE WHEN locationid = 4 THEN floatvalue END) MR 
    FROM table1 
WHERE locationid IN(1, 2, 3, 4) 
UNION ALL 
SELECT MAX(CASE WHEN locationid = 5 THEN floatvalue END), 
     MAX(CASE WHEN locationid = 6 THEN floatvalue END), 
     MAX(CASE WHEN locationid = 7 THEN floatvalue END), 
     MAX(CASE WHEN locationid = 8 THEN floatvalue END) 
    FROM table1 
WHERE locationid IN(5, 6, 7, 8) 

这里是SQLFiddle演示

+0

没有工会都有限制吗? – hearmeroar

+0

@hearmeroar对不起,我不太明白你的意思是*工会是否有限制?*。你能否详述一下你想达到的目标? – peterm

+0

我的意思是我可以使用union的select语句,是否有限制?就像直到5个陈述可以用于工会所有 – hearmeroar