#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