0
votes

Sélectionnez l'instruction qui renvoie un enregistrement en fonction de plusieurs enregistrements

ont vu des questions similaires mais pas exactement la même chose. J'ai une table avec plusieurs identifiants et je veux faire une instruction SELECT qui correspond à tous les PIDS et renvoyer l'identifiant une fois fort>. xxx pré>

en d'autres termes, si 123 = = TR et 234 = US et 536 = L (espérons que cela a du sens) Retournez 1 et non 1,1,1. P>

Je ne peux pas faire de P>

SELECT ID 
FROM MYTABLE 
WHERE PID = 123 
  AND DET = 'TR' 
  AND PID = 234 
  AND DET = 'US' 
  AND PID = 536 
  AND DET = 'L'


0 commentaires

3 Réponses :


3
votes

Je pense que vous voulez un avoir code>?

SELECT ID
FROM dbo.YourTable
GROUP BY ID
HAVING COUNT(CASE WHEN PID = 123 AND DET = 'TR' THEN 1 END) > 0
   AND COUNT(CASE WHEN PID = 243 AND DET = 'US' THEN 1 END) > 0
   AND COUNT(CASE WHEN PID = 536 AND DET = 'L' THEN 1 END) > 0;


1 commentaires

Merci - totalement négligé cela. Parfois, il est bon d'avoir une deuxième paire d'yeux pour le regarder.



2
votes

Vous pouvez utiliser l'agrégation et avoir code>. En supposant qu'aucun duplicata (ID, PID, DET) code>, vous en souligneriez:

select id
from mytable
where 
    (pid = 123 and det = 'TR') 
    or (pid = 234 and det = 'US') 
    or (pid = 536 and det = 'L')
group by id
having count(*) = 3


0 commentaires

2
votes

C'est un cas classique de division relationnelle. La solution est la suivante: xxx

pour le test de données.

requête pour le résoudre: xxx


0 commentaires