我使用按查询分组来获得所需的输出

本文关键字:输出 查询 | 更新日期: 2023-09-27 18:36:16

这是我的表(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

我将这个查询与分组依据一起使用,但我没有得到所需的输出。
我想要计数记录 ID 和具有相应子批次名称的状态为"D"的列。应拒绝具有空值的字段。

查询

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,原始 2 的 DE2 计数为 3

,原始 2 计数为 2。
Batchname   SubBatchname    Records DE1  DE2   
12042014    raw3               2     2    2   
12042014    raw4               2     2    2   

但是我想要的输出就像 DE1,DE2 对于 raw3 应该是 2,对于 raw4 应该是 0

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

我使用按查询分组来获得所需的输出

你可以用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