Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在单个Select语句中将列转换为行的SQL_Sql_Sql Server_Sql Server 2008_Calculated Columns - Fatal编程技术网

在单个Select语句中将列转换为行的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

我需要转换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 "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