Anmelden

View Full Version : SQL Select mit SUM aus einer DB



Seiten : 1 [2]

Fuerchau
30-03-06, 11:43
Select 'AR' , KZ05RG, KZ06RG, PROGRG,
VKGBRG, KDA5RG,
(CASE WHEN KDI8RG <> 0 THEN KDI8RG ELSE KDA8RG END),
RGJJRG, RGMMRG
Count(distinct(BENRRG))
From INFRGP
Where RGJJRG = 2006
Group by KZ05RG, KZ06RG, PROGRG, VKGBRG,
KDA5RG, KDI8RG, KDA8RG, RGJJRG, RGMMRG

woki
30-03-06, 11:49
Ich möchte nicht für jeden Monat einen Datensatz, sondern die Anzahl der Rechnungen für jeden Monat in einem Datensatz.
Als Beispiel hier der die Summes des Warenwerts für jeden Monat und Gesamtsumme:

Select 'UI' , KZ05RG, KZ06RG, PROGRG,
VKGBRG, KDA5RG,
(CASE WHEN KDI8RG <> 0 THEN KDI8RG ELSE KDA8RG END),
RGJJRG,
Sum(Case When RGMMRG = 1 then BWESRG else 0 End),
Sum(Case When RGMMRG = 2 then BWESRG else 0 End),
Sum(Case When RGMMRG = 3 then BWESRG else 0 End),
Sum(Case When RGMMRG = 4 then BWESRG else 0 End),
Sum(Case When RGMMRG = 5 then BWESRG else 0 End),
Sum(Case When RGMMRG = 6 then BWESRG else 0 End),
Sum(Case When RGMMRG = 7 then BWESRG else 0 End),
Sum(Case When RGMMRG = 8 then BWESRG else 0 End),
Sum(Case When RGMMRG = 9 then BWESRG else 0 End),
Sum(Case When RGMMRG = 10 then BWESRG else 0 End),
Sum(Case When RGMMRG = 11 then BWESRG else 0 End),
Sum(Case When RGMMRG = 12 then BWESRG else 0 End),
Sum(BWESRG) as GesamtSumme
From INFRGP
Where RGJJRG = 2006
Group by KZ05RG, KZ06RG, PROGRG, VKGBRG,
KDA5RG, KDI8RG, KDA8RG, RGJJRG



Hier sagt SQL/400 "Spalte RGMMRG oder Ausdruck in SELECT-Liste nicht gültig."

Select 'AR' , KZ05RG, KZ06RG, PROGRG,
VKGBRG, KDA5RG,
(CASE WHEN KDI8RG <> 0 THEN KDI8RG ELSE KDA8RG END),
RGJJRG,
(Case When RGMMRG = 1 then Count(distinct(BENRRG)) else 0 End),
Count(distinct(BENRRG))
From INFRGP
Where RGJJRG = 2006
Group by KZ05RG, KZ06RG, PROGRG, VKGBRG,
KDA5RG, KDI8RG, KDA8RG, RGJJRG


Da muß es doch eine Lösung geben.... :confused:

Fuerchau
30-03-06, 12:19
Wenn du Group By verwendest, musst du alle Felder aufführen, die keine Aggregat-Funktion haben:

'UI' ,
(CASE WHEN KDI8RG <> 0 THEN KDI8RG ELSE KDA8RG END),

Spalten, die nicht selektiert sind, dürfen in Group By auch nicht vorkommen:

KDI8RG, KDA8RG

Der Syntax-Checker liefert da ggf. auch mal falsche Hinweise.
Ist das Feld RGMMRG denn auch tatsächlich in der Datei ?

Fuerchau
30-03-06, 12:21
count(distinct (Case When RGMMRG = 1 then BENRRG else NULL End)),

Die Aggregatfunktion muss aussen liegen !
NULL wird nicht mitgezählt.

woki
30-03-06, 12:33
count(distinct (Case When RGMMRG = 1 then BENRRG else NULL End)),

Die Aggregatfunktion muss aussen liegen !
NULL wird nicht mitgezählt.

Super, das war's!!! :D