我使用group by query来获得所需的输出

时间:2015-01-06 04:43:25

标签: c# sql

这是我的表(Tbl_12042014),其中包含recordId,batchName,SubaBatchname,OpStatus1,OpStatus2等字段。

   RecordId     Batchname   SubBatchname     OpStatus1    OpStatus2
       1         12042014      raw3         D            D
       2         12042014      raw3         D            D
       3         12042014      raw4         Null         Null
       4         12042014      raw4         Null         Null

我在group by中使用了这个查询,但是我没有获得所需的输出 我想要计数recordId和列有状态' D'对于相应的subbatchName。 应拒绝具有空值的字段。

查询

SELECT BatchName,SubBatchName,Count(RecordId)AS Records,
(Select count ( a.Opstatus1)  FROM  Tbl_12042014 as a where Opstatus1='D' ) as DE1,
(Select count(b.Opstatus2)  FROM  Tbl_12042014 as b where Opstatus2='D' )as DE2 
FROM  Tbl_12042014 GROUP BY BatchName, SubBatchName

我通过执行上面的查询获得输出。我得到了DE1,原始3的DE2计数为2,raw4的计数为2。

Batchname   SubBatchname    Records DE1  DE2   
12042014    raw3               2     2    2   
12042014    raw4               2     2    2   

但是我想要的输出就像DE1,raw2应该是2,raw4应该是0。

Batchname   SubBatchname    Records   DE1  DE2   
12042014    raw3              2        2    2     
12042014    raw4              2        0    0   

1 个答案:

答案 0 :(得分:1)

您可以使用case based aggregation

执行此操作
SELECT BatchName,SubBatchName, Count(RecordId)AS Records,
sum(case when Opstatus1='D' then 1 else 0 end) as DE1,
sum(case when Opstatus2='D' then 1 else 0 end) as DE2 
FROM  Tbl_12042014 GROUP BY BatchName, SubBatchName