J'ai un tableau comme ci-dessous

Id     |  CompanyName
---    |  ---
100    |  IT
100    |   R&D
100    |   Financial
100    |  Insurance
110    |  IT
110    |  Financial
110    |  Product Based
111    |  R&D
111    |  IT

Le tableau contient les données comme la structure ci-dessus mais contient des milliers d'identifiants comme ceux-ci

Je veux découvrir tous les identifiants dans lesquels tous les noms de société sont IT et R & D. Si pour l'un des identifiants, le nom de la société ne figure ni dans l'informatique ni dans la R&D, alors ne tenez pas compte de ces identifiants. par exemple. L'identifiant 100 ne peut pas être dans cette liste car il a un nom de société supplémentaire en tant que financier, mais l'identifiant 111 sera pris en compte car toutes les entreprises sont IT et R&D

De l'aide?

0
Ritesh 8 août 2017 à 17:41

2 réponses

Meilleure réponse

Je le ferais comme:

select id
from t
having sum(case when CompanyName not in ('IT', 'R&D') then 1 else 0 end) = 0 and
       sum(case when CompanyName in ('IT', 'R&D') then 1 else 0 end) = 2;  -- use "> 0" if you want either one.

Remarque: cela suppose que vous n'avez pas de doublons dans le tableau.

0
Gordon Linoff 8 août 2017 à 15:08
select id,
  sum(case when CompanyName='IT' OR CompanyName='R&D' then 1 else 0 end) as c1
from t
group by id
having count(*)=2 and c1=2
1
StanislavL 8 août 2017 à 14:46