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

Oracle 按键列分组,并获取具有一个有效值和零值的记录,oracle,db2,Oracle,Db2,我们有一个场景,根据GROUPBY键列,我必须只获取组合为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

我们有一个场景,根据GROUPBY键列,我必须只获取组合为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)

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

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

请建议我在选择查询中通过添加最小值(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子句中添加另一个
,以检查
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;

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

您想要
Surya
的记录,其中id=0???@RobertoHernandez。。谢谢你的回复。是的,根据超过count(*)>1的关键列,在这些记录中,如果我们的最小值为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;