1
votes

Sélectionnez les ID qui ont des lignes avec NBR 1 et 2 sur des lignes séparées

Je cherche à écrire du SQL qui renverra des lignes où un VENDOR_ID a à la fois une ligne avec NBR_ID = 1 et une autre ligne avec NBR_ID = 2 code>. Dans l'exemple ci-dessous, le SQL renvoie des données pour VENDOR_ID 93309A, une ligne avec NBR_ID 1 et l'autre ligne avec NBR_ID 2. XXX

J'ai écrit le SQL suivant, mais cela ne renvoie pas spécifiquement les VENDOR_ID avec à la fois une ligne avec NBR_ID de 1 et une autre ligne avec NBR_ID de 2.

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

Comment puis-je mettre à jour pour ne renvoyer que les VENDOR_ID qui ont ces NBR_ID sur des lignes distinctes? p>


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser l'agrégation:

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;

Cela ne renvoie pas NBR_ID pour deux raisons. Premièrement, votre question ne précise pas que vous le souhaitez. Deuxièmement, c'est plutôt redondant, car vous savez que la liste se compose à la fois de 1 et de 2.


2 commentaires

J'ai ajouté NBR_ID aux éléments Select et Group By , mais cela ne renvoie aucune donnée. Je veux toujours afficher cette colonne et renvoyer les deux lignes (avec NBR_ID 1 et NBR_ID 2, respectueusement).


De plus, cela semble renvoyer des lignes avec plus de NBR_ID 1 et NBR_ID 2, il renvoie des VENDOR_ID avec des NBR_ID, 3 ou plus également. Idéalement, je ne veux renvoyer que ceux qui n'ont que 1 et 2.



1
votes

utiliser la sous-requête corrélée

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) 


4 commentaires

Fonctionne parfaitement! Merci!


Cela semble renvoyer des VENDOR_ID qui ont des lignes avec NBR_ID supérieur à 2, c'est-à-dire qu'il renverra les lignes 1 à 4 si un VENDOR_ID a 4 NBR_ID , chacun sur des lignes distinctes. Comment puis-je simplement renvoyer des VENDOR_ID qui n'ont que les NBR_ID lignes 1 et 2?


Merci - Existe-t-il un moyen de toujours sélectionner les colonnes GROUP_ID et NBR_ID comme vous le faisiez auparavant?


Génial, fonctionne comme prévu! Merci encore pour le suivi.



0
votes

l'utilisation existe

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)


3 commentaires

Ce n'est pas correct, il renvoie des lignes par VENDOR_ID dont le NBR_ID est supérieur à 2 (par exemple 3,4,5)


Cela renvoie toujours les VENDOR_ID qui ont des lignes avec NBR_ID supérieur à 2 (par exemple 3,4,5).


@Nick vérifier maintenant