Sie müssen group by dept
(das ist fast offensichtlich). Sie müssen nur die Gruppen beibehalten, in denen kein Mitarbeiter einen anderen Status als OOO
hat. Diese Art von Bedingungen gehört auf Gruppenebene (im Gegensatz zu einzelnen Zeilenebenen) zu einer Klausel having
. Sie müssen mit der Möglichkeit umgehen, dass der STATUS null
sein kann. Und Sie können die bedingte Zählung in having
verwenden.
with
inputs (dept, manager, status) as (
select 'FINANCE' , 'JOHN' , 'OOO' from dual union all
select 'FINANCE' , 'JACK' , 'OOO' from dual union all
select 'FINANCE' , 'STEVE' , 'OOO' from dual union all
select 'MARKETING', 'BARBER', 'WFH' from dual union all
select 'MARKETING', 'ROBERT', 'WORK' from dual union all
select 'HR' , 'KATHY' , 'OOO' from dual union all
select 'HR' , 'NEIL' , 'OOO' from dual
)
-- end of test data (not part of the query); SQL query begins BELOW THIS LINE
select dept
from inputs
group by dept
having count(case when status is null or status != 'OOO' then 1 end) = 0
;
DEPT
-------
HR
FINANCE
Das ist einfach ... Was hat Sie dazu gebracht, diese Frage an SO zu stellen. Was ist dein Problem und was hast du probiert? – XING
Dies ist extrem einfach mit einer Reihe von Lösungen auf einer einfachen Suche. Bitte lesen Sie http://stackoverflow.com/help/how-to-ask und versuchen Sie zumindest selbst eine Lösung und teilen Sie dies als Teil der Antwort. – BriteSponge
Ich verstehe, dass dies sehr einfach ist, und ich habe einige Möglichkeiten, dies zu erreichen. Ich wollte sehen, ob es einen SQL-Experten gibt, der eine Lösung bietet, die die beste Leistung bietet. Die Lösung, die ich habe, funktioniert nicht am besten, wenn Sie Millionen von Datensätzen haben, daher die Anfrage. – user5152640