Je cherche à écrire du SQL qui renverra des lignes où un J'ai écrit le SQL suivant, mais cela ne renvoie pas spécifiquement les Comment puis-je mettre à jour pour ne renvoyer que les 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 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)
VENDOR_ID
qui ont ces NBR_ID
sur des lignes distinctes? p>
3 Réponses :
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.
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.
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)
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.
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)
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