Группируйте по ключевым столбцам и получайте записи, имеющие одно допустимое значение и нулевое значение

#oracle #db2

#Oracle #db2

Вопрос:

у нас есть сценарий, в котором в соответствии с группой по ключевым столбцам я должен получить только запись, содержащую комбинацию 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, дата, номер, пол)

 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     
  

Пожалуйста, предложите, могу ли я добавить какие-либо изменения в приведенный выше запрос

Комментарии:

1. вам нужна запись, Surya где идентификатор = 0??

2. @RobertoHernandez .. Большое спасибо за ответ. Да, в соответствии с ключевыми столбцами, где у меня больше, чем count (*) > 1 — среди этих записей, где у нас минимум 0, я пытаюсь получить это

Ответ №1:

при выполнении group by добавьте MIN (ID) в запрос select, а затем извлеките 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
  

Ответ №2:

Просто добавьте еще один AND в предложение 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