SQL联合查询计数到不同的列

时间:2016-04-10 02:35:25

标签: sql sql-server

我可以使用一些帮助。我有一个查询,使用Case和Like语句计算故障代码的数量,并在日期使用Where子句。然后我将它与辅助查询联合起来。唯一的区别是日期。它可以工作,但返回

中的值
    Fault Code     Count
    20k            71
    60k            167
    20k            86
    60k           178

它返回“计数”列下的辅助计数。但是,我想添加另一列。例如:

    Fault Code    CountA     CountB
    20k           71         86
    60k           167        178

有什么建议吗?我是否创建临时表?

这是我的代码。

    SELECT 
    CASE
    WHEN FaultCode LIKE '60%' THEN '60k'
    WHEN FaultCode LIKE '20%' THEN '20k'
    END AS FaultCode
    , COUNT(FaultCode) AS Day1
    FROM RmaSummary 
    Where CreationTime > '2016-03-30' AND CreationTIme < '2016-03-31' AND
    ClosedTime Is null AND (FaultCode LIKE '60%' OR FaultCode LIKE '20%')
    AND FaultCode <> '20000' AND FaultCode <> '60052' AND FaultCode <> '0'
    GROUP BY 
    CASE 
    WHEN FaultCode LIKE '60%' THEN '60k' 
    WHEN FaultCode LIKE '20%' THEN '20k' 
    END 
    Union All
    SELECT 
    CASE
    WHEN FaultCode LIKE '60%' THEN '60k'
    WHEN FaultCode LIKE '20%' THEN '20k'
    END AS FaultCode
    , COUNT(FaultCode) AS Day2
    FROM RmaSummary 
    Where CreationTime > '2016-03-31' AND CreationTIme < '2016-04-01' AND 
    ClosedTime Is null AND (FaultCode LIKE '60%' OR FaultCode LIKE '20%') 
    AND FaultCode <> '20000' AND FaultCode <> '60052' AND FaultCode <> '0'
    GROUP BY 
    CASE 
    WHEN FaultCode LIKE '60%' THEN '60k' 
    WHEN FaultCode LIKE '20%' THEN '20k' 
    END 

1 个答案:

答案 0 :(得分:1)

使用Conditional Aggregation代替UNION,这样可以获得预期格式的结果。

仅当faultcode在给定日期范围内落下

时,才会对记录进行计数
SELECT CASE 
         WHEN faultcode LIKE '60%' THEN '60k' 
         WHEN faultcode LIKE '20%' THEN '20k' 
       END        AS FaultCode, 
       Count(CASE 
               WHEN creationtime > '2016-03-30' 
                    AND creationtime < '2016-03-31' THEN faultcode 
             END) AS Day1, 
       Count(CASE 
               WHEN creationtime > '2016-03-31' 
                    AND creationtime < '2016-04-01' THEN faultcode 
             END) AS Day2 
FROM   rmasummary 
WHERE  closedtime IS NULL 
       AND ( faultcode LIKE '60%' 
              OR faultcode LIKE '20%' ) 
       AND faultcode <> '20000' 
       AND faultcode <> '60052' 
       AND faultcode <> '0' 
GROUP  BY CASE 
        WHEN faultcode LIKE '60%' THEN '60k' 
        WHEN faultcode LIKE '20%' THEN '20k' 
      END 
相关问题