2013-10-29 75 views
1

我有一個三列SQL查詢。第一個是Year(分類),第二個是Site(分類),最後一個是溫度(浮點)。這些行作爲Year X Site的唯一組合。例如:SQL:查詢格式

當前查詢結果

Year, Site, Temp 
1, 1, x11 
1, 2, x12 
1, 3, x13 
2, 1, x21 
2, 2, x22 
2, 3, x23 
3, 1, x31 
3, 2, x32 
3, 3, x33 

我想有每個站點的不同列,同時保持年行。例如:

所需的查詢結果

Year, TSite1, TSite2, TSite3 
1, x11, x12, x13 
2, x21, x22, x23 
3, x31, x23, x33 

關於如何做一個查詢,導致這種格式的任何想法?我不介意使用臨時表或視圖來存儲信息。

在此先感謝。

+5

你正在使用哪些DBMS?你事先知道所有的網站嗎? –

+1

詢問並回答了很多次...... hhttp://stackoverflow.com/search?q =轉+行+轉+列 –

+1

你在找什麼是一個pivot/unpivot函數。 –

回答

0

樞軸查詢是一種方法(如在評論中提到的),如果你只是想一個逗號分隔的站點列表中,那麼你就可以做到這一點與group_concat()

select year, group_concat(temp separator ', ' order by site) as temps 
from t 
group by year; 

我知道這可能不是你想要什麼 - 您可以通過將其轉換爲的字符串,例如丟失的類型信息temp。但是,如果你只是想看到臨時表或將它們導出到另一個工具,那麼它可能就是你需要的。

1
SELECT Year,MIN(CASE WHEN Site=1 THEN Temp ELSE 0 END) as Tsite1, 
     MIN(CASE WHEN Site=2 THEN Temp ELSE 0 END) as Tsite2, 
     MIN(CASE WHEN Site=3 THEN Temp ELSE 0 END) as Tsite3 FROM table GROUP BY Year 
+0

非常感謝您的意見。訣竅是MIN()[也可以是MAX()]函數,否則將無法工作。最好! –

+0

Mihai,任何想法如果網站列表不知道或從查詢中提取,我會怎麼做? –

+0

我懷疑可以做,如果網站不知道,但問如果你需要它的更多細節問一個新的問題。 – Mihai