2014-03-13 26 views
1

我需要的解決方案,用於將SQL輸出SQL轉換列成行的一個SELECT語句

我寫

SELECT Merchant_Master.Merchant_ID, 
      COUNT(Coupon_Type_ID) AS "Total Coupons", 
      Coupon_Type_ID, 
      CASE WHEN Coupon_Type_ID=1 
        THEN COUNT(Coupon_Type_ID) 
      END AS "Secret", 
      CASE WHEN Coupon_Type_ID=2 
        THEN count(Coupon_Type_ID) 
      END AS "Hot" 
     FROM Coupon_Master 
      INNER JOIN Merchant_Master 
       ON Coupon_Master.Merchant_ID=Merchant_Master.Merchant_ID 
    GROUP BY 
      Coupon_Master.Coupon_Type_ID, 
      Merchant_Master.Merchant_ID 

並獲得輸出

Merchant_ID Total Coupons Coupon_Type_ID Secret  Hot 
----------- ------------- -------------- ----------- ----------- 
20   6    1    6   NULL 
22   4    1    4   NULL 
22   2    2    NULL  2 
23   1    2    NULL  1 
24   2    1    2   NULL 
25   3    1    3   NULL 
25   2    2    NULL  2 

但我想作爲

輸出
Merchant_ID  Secret  Hot_Coupons  
-----------  ------ ------------- 
20    6    0 
22    4    2 
23    0    1 
24    2    0 
25    3    2 

請幫我解決這個問題。

回答

2

移動骨料內CASE表達式。我也切換到使用SUM而不是COUNT - 有一個COUNT變體,但它可能會顯示一個警告消除NULL值,我寧願避免。

SELECT Merchant_Master.Merchant_ID, 
     SUM(CASE WHEN Coupon_Type_ID=1 
       THEN 1 ELSE 0 END) AS "Secret", 
     SUM(CASE WHEN Coupon_Type_ID=2 
       THEN 1 ELSE 0 END) AS "Hot" 
    FROM Coupon_Master 
     INNER JOIN Merchant_Master 
      ON Coupon_Master.Merchant_ID=Merchant_Master.Merchant_ID 
GROUP BY 
     Merchant_Master.Merchant_ID 
+0

謝謝,它解決了問題。很好的幫助。 – KSB

+0

另一個更改是從GROUP BY中刪除Coupon_Master.Coupon_Type_ID。 –

0

放置在一個子查詢,並添加group by Merchant_ID, Total, Coupons, Coupon_Type_ID

總結祕密和熱作爲SUM

select 
... 
SUM(secret) as secret, 
SUM(Hot_Coupons) as Hot_Coupons  
FROM (your original query) raw 
group by Merchant_ID, Total, Coupons, Coupon_Type_ID 
+0

在我看來,有在表(祕密和熱) – Alexander

+0

感謝及時答覆沒有這樣的列,但我沒有這樣的名字即熱,在我的表祕密的列。 – KSB

+0

我沒有得到輸出。 – KSB