so sollte es aussehen.oracle sum over() mit where-Klausel
eine weitere spezielle Frage. Ich habe folgende Daten und Abfrage:
with helptab as (
select '6762' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '6762' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '6762' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '6762' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '6762' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '6762' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '6762' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '6763' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6763' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6763' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6763' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6763' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6763' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6763' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6763' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6763' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6835' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6835' as nr, 'B' as sub_val, 1 as sub_nr from dual
union all
select '6835' as nr, 'B' as sub_val, 1 as sub_nr from dual
union all
select '6835' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '6835' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'C' as sub_val, 1 as sub_nr from dual
union all
select '8904' as nr, 'C' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'C' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'C' as sub_val, 1 as sub_nr from dual
union all
select '8904' as nr, 'C' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8904' as nr, 'D' as sub_val, 0 as sub_nr from dual
union all
select '8905' as nr, 'B' as sub_val, 1 as sub_nr from dual
union all
select '8905' as nr, 'B' as sub_val, 0 as sub_nr from dual
union all
select '8905' as nr, 'C' as sub_val, 0 as sub_nr from dual
union all
select '8905' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8905' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8905' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8905' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8905' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8905' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8905' as nr, 'A' as sub_val, 0 as sub_nr from dual
union all
select '8905' as nr, 'D' as sub_val, 0 as sub_nr from dual)
select nr, sub_val, sub_nr, count(sub_val) as cnt
, case when sub_val = 'A' then 0 when sum(count(sub_val)) over(partition by nr) >= 5 then count(sub_val) else 0 end as MoreThan5
, case when sub_val = 'A' then count(sub_val) when sum(count(sub_val)) over(partition by nr) < 5 then count(sub_val) else 0 end as LessThan5
from helptab
group by nr, sub_val, sub_nr
order by nr, sub_val, sub_nr
, wie es funktionieren soll:
jede Zeile, wo sub_val ‚A‘ gleich muss auf der LessThan5 Spalte hat zur Folge hat. Alle anderen müssen durch Summe über nr und Sub_val (außer 'A') überprüft werden. wenn weniger als 5, müssen alle Ergebnisse auch auf die LessThan5-Spalte gesetzt werden, andernfalls auf MoreThan5. Ich dachte sum() over (Partition by) ist der richtige Weg, aber es funktioniert nicht richtig.
Zwei einfache Tabellen in der Frage - mit Beispieldaten und die gewünschten Ergebnissen - wirklich helfen würde, andere zu verstehen, was Sie tun wollen. –
Ich habe gerade ein Bild hinzugefügt, um es (hoffentlich) klarer zu machen – user
Bitte lesen Sie die Richtlinien für das Posten von Fragen. http://stackoverflow.com/help/on-topic "Fragen, die Debugging-Hilfe suchen (" Warum funktioniert dieser Code nicht? ") müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen Fehler und den kürzesten Code enthalten, der für die Reproduktion benötigt wird die Frage selbst. Fragen ohne eine eindeutige Problembeschreibung sind für andere Leser nicht nützlich. Siehe: Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels. " –