按 Key 列分组并获取具有一个有效值和零值的记录

Group by on Key columns and get the records having one valid value and zero value

我们有一个场景,根据关键列分组,我必须只获得具有 0 和列“ID”的任何有效数字组合的记录

以下面的例子

TransId,CustomerNm,Date      ,Number,Gender,ID
1      ,Surya     ,2020-01-01,123456,M     ,1234
1      ,Surya     ,2020-01-01,123456,M     ,0
2      ,Naren     ,2020-01-20,123456,M     ,3456
2      ,Naren     ,2020-01-20,123456,M     ,6789 

当我尝试使用以下查询时(关键列:TransId、CustomerNm、Date、Number、Gender)

select TransId,CustomerNm,Date,Number,Gender from INS.Transaction 
group by TransId,CustomerNm,Date,Number,Gender having count(*) > 1

i will get both the records 

1      ,Surya     ,2020-01-01,123456,M     
2      ,Naren     ,2020-01-20,123456,M 

但我正在尝试获取 ID =0 的记录。期望输出为

1      ,Surya     ,2020-01-01,123456,M     

请建议我是否可以在上述查询中添加任何更改

在 select 查询中添加 MIN(ID) 进行分组,然后获取 id 0

select * from (
select TransId,CustomerNm,Date,Number,Gender,MIN(ID) ID from INS.Transaction 
group by TransId,CustomerNm,Date,Number,Gender having count(*) > 1 ) where ID = 0

只需在 having 子句中添加另一个 AND 来检查是否 min(id) = 0 。我重命名了一些列。

select transid,customernm,transaction_date,some_number,gender 
  from transaction 
group by transid,customernm,transaction_date,some_number,gender 
having count(*) > 1 and min(id) = 0;

注意:- 不要使用保留字作为列名,如 datenumber