2014-10-27 58 views
2

我有一個包含一個表:SQL結果

EXTDEP EXTCODE PRICE 
200  10001 200 
500  10001 25 
600  10001 36 

結果我想:

EXTCODE PRICE200 PRICE500 PRICE600 
10001 200  25   36 

結果我得到:

EXTCODE PRICE200 PRICE500 PRICE600 
10001 NULL  NULL  36 
10001 NULL  25  NULL 
10001 200  NULL  NULL 

我的代碼:

SELECT 
     [ExtCode] 

     case when extdep = '200' then price1 end as '200', 
     case when extdep = '500' then price1 end AS '500', 
     case when extdep = '600' then price1 end AS '600' 

有什麼建議嗎? :)

回答

5

試試這個,一個總量適用於CASE語句:

SELECT 
     [ExtCode], 

     MAX(case when extdep = '200' then price1 end) as '200', 
     MAX(case when extdep = '500' then price1 end) AS '500', 
     MAX(case when extdep = '600' then price1 end) AS '600' 
FROM your_table 
GROUP BY ExtCode 
+0

謝謝!像魅力一樣 – user2893780 2014-10-27 13:10:06

+0

在每種情況下都應該有一個「else 0」,這樣你就不會得到「警告:空值被集合或其他SET操作消除」。警告? – 2014-10-27 13:13:57

+0

不,你得到的警告是來自你用作客戶端的任何東西,但不是來自MySQL本身。忽略它。你不想以非法的方式改變你的數據。 – fancyPants 2014-10-27 13:16:29

2

下面是一個使用PIVOT一種替代方法

SELECT * 
FROM [table] 
    PIVOT (MAX(PRICE) FOR EXTDEP IN ([200], [500], [600])) T 

這將生成以下輸出

EXTCODE  200   500   600 
----------- ----------- ----------- ----------- 
10001  200   25   36 
+0

那麼這給了我一樣的輸出,就像我的查詢 – user2893780 2014-10-27 13:31:36

3

你可以使用PIVOT功能也是這樣的:

SELECT [ExtCode], 
    [1] AS '200', 
    [2] AS'500', 
    [3] AS'600' 
FROM 
(
     Select [ExtCode], extdep, price1 
     From your_table 
) src 
PIVOT 
    ( 
     Max(price1) 
     For extdep in ([1], [2], [3]) 
) piv 
+0

請通過點擊答案左側的檢查來接受@fancyPants答案。這樣其他人知道問題已經解決。 – 2014-10-27 13:23:38

+0

+1我不是一個SQL Server的傢伙。忘了它:) – fancyPants 2014-10-27 13:23:51