Question

I need solution for converting SQL output

I am writing

    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

and getting output as

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

But I want output as

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

Please, help me to solve the issue.

Était-ce utile?

La solution

Move the CASE expressions inside the aggregates. I've also switched to using SUM rather than COUNT - there is a COUNT variant but it may display a warning about eliminating NULL values that I'd rather avoid.

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

Autres conseils

Place it in a subquery and add group by Merchant_ID, Total, Coupons, Coupon_Type_ID

Aggregate the Secret and hot as 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top