Выберите идентификаторы, которые имеют строки с NBR 1 и 2 в отдельных строках - PullRequest
1 голос
/ 03 апреля 2019

Я хочу написать SQL, который будет возвращать строки, в которых VENDOR_ID содержит строку с NBR_ID = 1 и другую строку с NBR_ID = 2.В приведенном ниже примере SQL возвращает данные для VENDOR_ID 93309A, строки с NBR_ID 1 и другой строки с NBR_ID 2.

GROUP_ID     VENDOR_ID    NBR_ID
AUX          27           1
AUX          87188A       1
AUX          92481A       1
AUX          92482A       1
AUX          92527A       1
AUX          93309A       1
AUX          93309A       2
AUX          93328A       1

Я написал следующий SQL, ноэто конкретно не возвращает VENDOR_ID как для строки с NBR_ID, равной 1, так и для другой строки с NBR_ID, равным 2.

SELECT GROUP_ID, VENDOR_ID, NBR_ID
FROM TEST_TABLE
WHERE NBR_ID IN (1,2)

Как я могу обновить, чтобы вернуть только VENDOR_ID, которые имеютэти NBR_ID в разных строках?

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

использовать коррелированный подзапрос

SELECT GROUP_ID,VENDOR_ID,NBR_ID
FROM TEST_TABLE a
WHERE exists(select 1 from TEST_TABLE b where a.GROUP_ID=b.group_id and 
a.VENDOR_ID=b.vendor_id and NBR_ID IN (1,2) 
having count(distinct nbr_id)=2) and NBR_ID IN (1,2) 
0 голосов
/ 03 апреля 2019

использование существует

select t1.* from TEST_TABLE t1
where exists ( select 1 from TEST_TABLE t2 where t1.VENDOR_ID=t2.VENDOR_ID
                                         and t1.GROUP_ID=t2.GROUP_ID
                                      and NBR_ID in (1,2)
                                      having count(distinct NBR_ID)=2)
and NBR_ID in (1,2)
0 голосов
/ 03 апреля 2019

Вы можете использовать агрегацию:

SELECT GROUP_ID, VENDOR_ID
FROM TEST_TABLE
WHERE NBR_ID IN (1, 2)
GROUP BY GROUP_ID, VENDOR_ID
HAVING COUNT(DISTINCT NBR_ID) = 2;

Это не возвращает NBR_ID по двум причинам.Во-первых, в вашем вопросе не указано, что вы этого хотите.Во-вторых, это довольно избыточно, потому что вы знаете, что список состоит из 1 и 2.

...