在SQL中计算groupwise类别

时间:2014-07-07 06:38:15

标签: sql count aggregate

我想在具有多个条件的sql server中找到类别明智的计数 下面是表格

enter image description here

我想找到groupwise,checklistcode明智的状态计数 例如,组CLT具有未结状态和已关闭状态的总计数

所以输出应该如下所示

CLT |熟料运输| CL07M1 |机械要求| 4 | 1

我尝试了如下查询,

    select distinct pd.GroupCode,
           pd.GroupName,
           pd.CheckListCode,
           pd.CheckListName,           
       OpenTotal =  
       CASE WHEN pd.Status = 'Open' THEN COUNT(pd.Status)               
       END,  
       ClosedTotal = 
       CASE WHEN pd.Status = 'Closed' THEN COUNT(pd.Status)             
       END
   from PunchListDetails pd
   group by pd.GroupCode,
            pd.GroupName,
            pd.CheckListCode,
            pd.CheckListName,
            pd.Status;

但结果不符合我的需要。以上查询显示以下结果 enter image description here

这显示在两个不同的行中,但我想以汇总的形式显示它,如上所述。

2 个答案:

答案 0 :(得分:2)

您的方法是正确的,但您(也)按状态进行分组,因此您将为每个状态获得不同的行 - 因此您将获得一行计算打开状态,另一行计算已关闭状态。< / p>

只需从pd.Status子句的末尾删除group by即可,您应该没问题:

select distinct pd.GroupCode,pd.GroupName,pd.CheckListCode,pd.CheckListName,           
   OpenTotal =  
   CASE WHEN pd.Status = 'Open' THEN COUNT(pd.Status)               
   END,  
   ClosedTotal = 
   CASE WHEN pd.Status = 'Closed' THEN COUNT(pd.Status)             
   END
from PunchListDetails pd
group by pd.GroupCode,pd.GroupName,pd.CheckListCode,pd.CheckListName

答案 1 :(得分:1)

你可以试试这个:

SELECT GroupCode
      ,GroupName
      ,CheckListCode
      ,CheckListName,           
      ,SUM(CASE WHEN Status = 'Open' THEN 1  ELSE 0 END) as OpenTotal
      ,SUM(CASE WHEN Status = 'Closed' THEN 1  ELSE 0 END) as ClosedTotal 
FROM PunchListDetails 
GROUP BY GroupCode,GroupName,CheckListCode,CheckListName