Ermittlung aller Reports und die Anzahl der Anwender je Report, die seit dem 01.01.2007 von min. 3 verschiedenen Anwendern verwendet wurden.
1.) Mit diesem Select erhalte ich die verschiedenen Anwender mit zugehöriger Report-Nummer:
select distinct rep_anwender, rep_nr
from report_list
where rep_aenddat >= TO_DATE('01.01.2007', 'dd.mm.yyyy')
group by rep_nr, rep_anwender
Anwender Report
1 100
2 100
3 100
Mit diesem Select kann ich eine View erstellen:
CREATE OR REPLACE VIEW V_View_01 AS
select distinct rep_anwender, rep_nr
from report_list
where rep_aenddat >= TO_DATE('01.01.2007', 'dd.mm.yyyy')
group by rep_nr, rep_anwender
2.) Mit dieser View ermittle ich nun zur Report-Nummer die maximale Anzahl der verschiedenen Anwender:
select rep_nr, count (all rep_nr) as maxAnzahl
from V_View_01
group by rep_nr
Als View formuliert:
CREATE OR REPLACE VIEW V_View_02 AS
select rep_nr, count (all rep_nr) as maxAnzahl
from V_View_01
group by rep_nr
3.) Mit dem dritten Select erhalte ich mein gewünschtes Ergebnis:
select rep_nr, maxAnzahl
from V_View02
where maxAnzahl >= 3
Report maxAnzahl
100 3
-------------------------------------------------------------
In Oracle kann ich das nun in folgendem Statement zusammenfassen:
select rep_nr,
count (rep_nr) maxAnzahl
count (rep_nr) maxAnzahl
from (
select rep_user,
rep_nr
select rep_user,
rep_nr
from report_list
where rep_aenddat >= TO_DATE('01.01.2007', 'dd.mm.yyyy')
group by rep_nr,
rep_anwender
rep_anwender
)
group by rep_nr
having count (rep_nr) >= 3
oder
select rep_nr, maxAnzahl
from (
select rep_nr,
count (all rep_nr) as maxAnzahl
select rep_nr,
count (all rep_nr) as maxAnzahl
from (
select distinct rep_anwender,
rep_nr
select distinct rep_anwender,
rep_nr
from report_list
where rep_aenddat >= TO_DATE('01.01.2007', 'dd.mm.yyyy')
group by rep_nr,
rep_anwender
rep_anwender
)
group by rep_nr
)
where maxAnzahl >= 3