J'ai quelques exemples de données comme:Logic pour vérifier si ids exactes sont présents dans un groupe dans SQL Server
INSERT INTO mytable ([ID], [FK_ID], [TYPE_ID])
VALUES
(1, 10, 1),
(2, 11, 1), (3, 11, 2),
(4, 12, 1), (5, 12, 2), (6, 12, 3),
(7, 14, 2), (8, 14, 3)
Maintenant, ici, je suis en train de vérifier si dans chaque groupe par FK_ID
nous avons correspondance exacte TYPE_ID
les valeurs 1 & 2
.
Ainsi, le résultat attendu est comme:
(1, 10, 1)
cela devrait échouer- Comme dans le groupe
FK_ID = 10
nous avons un seul enregistrement
- Comme dans le groupe
(2, 11, 1), (3, 11, 2)
cela devrait passer- Comme dans le groupe
FK_ID = 11
nous avons deux enregistrements. - Et les deux
TYPE_ID
correspondent1 & 2
valeurs.
- Comme dans le groupe
(4, 12, 1), (5, 12, 2), (6, 12, 3)
cela devrait aussi échouer- Comme nous l'avons 3 dossiers ici.
(7, 14, 2), (8, 14, 3)
cela devrait aussi échouer- Même si nous avons deux dossiers précis, il doit échouer comme
TYPE_ID
ici ne sont pas correspondant à1 & 2
valeurs.
- Même si nous avons deux dossiers précis, il doit échouer comme
Voici ma tentative:
select *
from mytable t1
where exists (select count(t2.TYPE_ID)
from mytable t2
where t2.FK_ID = t1.FK_ID
and t2.TYPE_ID in (1, 2)
group by t2.FK_ID
having count(t2.TYPE_ID) = 2);
Ce ne fonctionne pas comme prévu, car il passe aussi pour FK_ID = 12
qui a trois dossiers.
Démo: SQL Fiddle
Merci pour la solution. Ça a marché. – CodeNewbie
@CodeNewbie La meilleure façon de remercier quelqu'un dans Stackoverflow est de l'accepter comme votre réponse – Valli
Comment pouvons-nous faire cela? Je ne sais pas comment le faire. – CodeNewbie