在单个Select语句中将列转换为行的SQL
我需要转换SQL输出的解决方案 我在写作在单个Select语句中将列转换为行的SQL,sql,sql-server,sql-server-2008,calculated-columns,Sql,Sql Server,Sql Server 2008,Calculated Columns,我需要转换SQL输出的解决方案 我在写作 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 "Se
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
请帮我解决问题。将其放入子查询中,并按商户ID、总额、优惠券、优惠券类型ID添加
组
把秘密和热度汇总成总和
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
将大小写
表达式移动到聚合中。我还切换到使用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
在我看来,表中似乎没有这样的列(Secret和Hot),感谢您的及时回复,但我的表中没有这样名称的列,即Hot和Secret。我没有得到输出。您的查询中有名称为的列,另一个更改是从GROUP BY中删除优惠券\u Master.优惠券\u Type\u ID
。