我的表是這樣的:顯示SQL表等方式
Code label Zone Price
---- ----- ---- -----
049 able A 5
100 hui A 6
049 ddf B 10
100 dsqf B 34
我怎樣才能改變這樣的:
Code A B
---- --- ----
049 5 10
100 6 34
我的表是這樣的:顯示SQL表等方式
Code label Zone Price
---- ----- ---- -----
049 able A 5
100 hui A 6
049 ddf B 10
100 dsqf B 34
我怎樣才能改變這樣的:
Code A B
---- --- ----
049 5 10
100 6 34
select Code, A, B
from
(
select Code, Zone, Price
from YourTable
) T
pivot
(
min(Price) for Zone in (A, B)
) P
對不起,我還沒有測試這一點,但你應該能夠做到成纔是這樣的:
SELECT CODE,
SUM(CASE ZONE WHEN A THEN PRICE ELSE NULL END) AS A,
SUM(CASE ZONE WHEN B THEN PRICE ELSE NULL END) AS B
GROUP BY CODE
謝謝你,但我得到了消息102,Niveau 15,1,Ligne 8 語法與'','。 Msg 156,Niveau 15,État1,Ligne 10 語法不適用於所有語言。 – user609511 2012-04-24 18:04:42
像這樣的東西應該工作(假設表名爲 'T')
select codeA, A, B from
(select code as codeA, price as A from t where zone='A'),
(select code as codeB, price as B from t where zone='B')
where codeA=codeB
謝謝你,但結果不是1 ligne – user609511 2012-04-24 18:05:18
我不知道你想如何結合多個A或B的價格。您可能希望'min(價格)作爲A','總和(價格)作爲A' - 在我看來,每個代碼和區域可能只有一個價格。如果不是這樣,請添加摘要。 – 2012-04-24 18:07:42
你的例子是工作,但是當我添加C區,這意味着我必須比較哪裏CodeA = CodeB和CodeA = CodeC – user609511 2012-04-24 19:13:54
您要查找的詞是「支點」,並有大量的問題和答案解決這一被發現 - 無論是使用標準的SQL或使用特定數據庫系統的專有特性 - 其中我們知道不是你正在使用的。 – 2012-04-24 14:30:16
@Damien_The_Unbeliever - OP有7個關於SQL Server 2008的問題,所以這是一個提示。順便說一句,我測試了我的答案在Oracle的小提琴,它沒有奏效。將in子句更改爲「A」作爲A,將「B」更改爲B來使其工作。你知道這是什麼標準嗎? – 2012-04-24 15:09:57
@MikaelEriksson - 我只看了他們最近的5個問題,沒有一個被特別標記爲SQL Server。 'CASE'和'GROUP BY'通常可以實現數據透視,並將'CASE'包裝在您選擇的聚合中。這應該適用於任何標準產品。 – 2012-04-24 16:37:03