使用if条件选择查询结果过滤器

时间:2016-10-07 04:11:12

标签: sql sql-server

我有以下选择查询

              SELECT 
              Table.ID                
              SUM(CASE WHEN Table.Status = 1 THEN 1 ELSE null END) AS NormalCount,
              SUM(CASE WHEN Table.status = 2 THEN 1 ELSE null END) AS AbnormalCount
              FROM Table                 
              GROUP BY Table.ID

我希望得到以上结果并生成具有以下条件的新结果集

IF(NormalCount > 0 or AbnormalCount == NULL)
              SELECT 
              Table.ID                
              Table.Status AS "Normal"
              FROM Table                 
              GROUP BY Table.ID

ELSE IF ( AbnormalCount > 0)
              SELECT 
              Table.ID      
              Table.Status AS "Abnormal"
              SUM(CASE WHEN Header.status = 2 THEN 1 ELSE null END) AS AbnormalCount
              FROM Table                 
              GROUP BY Table.ID

1 个答案:

答案 0 :(得分:3)

我认为你想要的逻辑是将每个ID组标记为异常,如果它有一个或多个异常观察。如果是这样,那么您可以使用另一个CASE语句来检查条件异常总和并适当地标记状态。正常组具有异常计数为零的特征,但是这个计数将出现在所有组中。

SELECT t.ID,
       CASE WHEN SUM(CASE WHEN t.status = 2 THEN 1 ELSE 0 END) > 0
            THEN "Abnormal"
            ELSE "Normal" END AS Status,
       SUM(CASE WHEN t.status = 2 THEN 1 ELSE 0 END) AS AbnormalCount
FROM Table t
GROUP BY t.ID