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>. 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'
3 Réponses :
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;
Merci - totalement négligé cela. Parfois, il est bon d'avoir une deuxième paire d'yeux pour le regarder.
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
C'est un cas classique de division relationnelle. La solution est la suivante: pour le test de données. P> requête pour le résoudre: p>