2013-11-14 52 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