2012-04-24 60 views
2

我的表是這樣的:顯示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 
+2

您要查找的詞是「支點」,並有大量的問題和答案解決這一被發現 - 無論是使用標準的SQL或使用特定數據庫系統的專有特性 - 其中我們知道不是你正在使用的。 – 2012-04-24 14:30:16

+0

@Damien_The_Unbeliever - OP有7個關於SQL Server 2008的問題,所以這是一個提示。順便說一句,我測試了我的答案在Oracle的小提琴,它沒有奏效。將in子句更改爲「A」作爲A,將「B」更改爲B來使其工作。你知道這是什麼標準嗎? – 2012-04-24 15:09:57

+1

@MikaelEriksson - 我只看了他們最近的5個問題,沒有一個被特別標記爲SQL Server。 'CASE'和'GROUP BY'通常可以實現數據透視,並將'CASE'包裝在您選擇的聚合中。這應該適用於任何標準產品。 – 2012-04-24 16:37:03

回答

3
select Code, A, B 
from 
    (
    select Code, Zone, Price 
    from YourTable 
) T 
pivot 
    (
    min(Price) for Zone in (A, B) 
) P 
0

對不起,我還沒有測試這一點,但你應該能夠做到成纔是這樣的:

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 
+0

謝謝你,但我得到了消息102,Niveau 15,1,Ligne 8 語法與'','。 Msg 156,Niveau 15,État1,Ligne 10 語法不適用於所有語言。 – user609511 2012-04-24 18:04:42

1

像這樣的東西應該工作(假設表名爲 '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 
+0

謝謝你,但結果不是1 ligne – user609511 2012-04-24 18:05:18

+0

我不知道你想如何結合多個A或B的價格。您可能希望'min(價格)作爲A','總和(價格)作爲A' - 在我看來,每個代碼和區域可能只有一個價格。如果不是這樣,請添加摘要。 – 2012-04-24 18:07:42

+0

你的例子是工作,但是當我添加C區,這意味着我必須比較哪裏CodeA = CodeB和CodeA = CodeC – user609511 2012-04-24 19:13:54