Also bisher konnte ich die Ergebnisse immer verifizieren. Gerechnet wurde richtig.
Deine Erwartung mag da eine andere sein.
Wie gesagt, ein over() Ergebnis wird auf jede Zeile innerhalb des Resultsets ausgegeben.
Gerechnet wird also erst nach dem das Resultset komplett ist.
Hier wird gezählt nach der Gruppierung von Group By F1, F2!Code:Select F1, f2, Count(*) Count0, Count(*) over(partition By F1, F2) Count1, Count(*) over(Partition by F1) Count2 from x Group By F1, F2;
Du hast also 10 A/B Zeilen und 14 A/C-Zeilen.
Innerhalb der Gruppe F1/F2 kommt diese Zeile je 1 Mal vor.
Innerhalb der Gruppe F1 kommt A eben 2 mal vor.
Das hat mit distinct hier nichts zu tun, da du ja nur 2 Ergebniszeilen hast.Code:F1 F2 Count0 Count1 Count2 A B 10 1 2 A C 14 1 2
Lass mal das Group by am Ende weg, so dass du alle 34 Zeilen siehst.
Dabei muss der erste Count0 mit over() ergänzt werden.
Count0 liefert dann 34 über alles.
Count1 liefert dann 10 bei A/B und 14 bei AC.
Count2 liefert dann wieder 34, da du nur A hast.
Und solange man keinen Distinct bei Aggregaten angibt, wird auch nicht distinct gezählt.
Was ist daran nun so schwer zu verstehen?
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks