aximand
Goto Top

2 Summen in einer Abfrage mit Bedingung erstellen

Hallo,

es wäre gegeben eine Tabelle mit folgenden Feldern:
Umsatz, PLZ_Rechnungsempfänger, PLZ_Warenempfänger

Ich würde jetzt gerne sowas sehen wollen wie

UmsatzRE bezogen auf PLZ_Rechnungsempfänger
UmsatzLS bezogen auf PLZ_Warenempfänger


Umsatz  PLZRE  PLZLS
100         59         38
100         59         37
200         38         37



Raus kommen soll:

UmsatzRE   UmsatzLS  PLZ
200                        59
200            100  38
  300               37

Content-ID: 526790

Url: https://administrator.de/forum/2-summen-in-einer-abfrage-mit-bedingung-erstellen-526790.html

Ausgedruckt am: 22.12.2024 um 11:12 Uhr

Kraemer
Kraemer 18.12.2019 um 14:11:44 Uhr
Goto Top
Moin,
Zitat von @Aximand:
es wäre gegeben eine Tabelle mit folgenden Feldern:
was fehlt: alle wichtigen Informationen...
142232
142232 18.12.2019 aktualisiert um 14:16:01 Uhr
Goto Top
em-pie
em-pie 18.12.2019 aktualisiert um 14:23:25 Uhr
Goto Top
Moin,

wie @Kraemer schon schrieb, es fehlt an Infos.
Daher von mir auch nur recht oberflächlich:

SELECT
 ISNULL(myGroup1.PLZ, myGroup2.PLZ) as PLZ 
 , myGroup1.Umsatz
 , myGroup2.Umsatz
FROM
 (Select PLZ=PLZWarenempfänger, SUM(Umsatz) as Umsatz where PLZWarenempfänger is not NULL Group by PLZWarenempfänger) as myGroup1
FULL OUTER JOIN  (Select PLZ=PLZRechnungsempfänger , SUM(Umsatz) as Umsatz where PLZRechnungsempfänger is not NULL group by PLZWarenempfänger) as myGroup2
   on myGroup1.PLZ = myGroup2.PLZ

Gruß
em-pie
Aximand
Aximand 18.12.2019 aktualisiert um 16:37:23 Uhr
Goto Top
was fehlt denn da an wichtigen Infos?
Die Tabelle "Tabelle" enthält 4 Felder: lfdID (Primärschlüssel), RE-PLZ, Liefer-PLZ, Rechnungsbetrag
Ich habe einen Datensatz mit ID, Rechnungsbetrag, Rechnungsempfänger (RE-PLZ)und Lieferort (Liefer-PLZ)
Ich habe einen 2.-n. Datensatz mit ID, Rechnungsbetrag , Rechnungsempfänger und einem Lieferort.


Ich will eine Summe aller Rechnungebeträge bezogen (gruppiert) auf den Lieferort
Ich will eine Summe aller Rechnungsbeträge gruppiert auf den Rechnungsempfänger-Ort
Dabei gilt, dass die Summe Rechnungsbeträge logischerweise identisch sein muss.

Beispiel:
1000 EUR RE-PLZ 59, Liefer-PLZ 38
500 EUR RE-PLZ 59, Liefer-PLZ 35
300 EUR RE-PLZ 55, Liefer-PLZ 35
100 EUR RE-PLZ 55, Liefer-PLZ 32

Summenbildung Rechnungsbeträge bezogen auf RE-PLZ:
1500 in PLZ 59 (Datensatz 1+2)
400 in PLZ 55 (Datensatz 3+4)
Gesamtsumme 1900

Summenbildung bezogen auf Liefer-PLZ:
1000 in PLZ 38 (Datensatz 1)
800 in PLZ 35 (Datensatz 2+3)
100 in PLZ 32 (Datensatz 4)
Gesamtsumme 1900

Als Ergebnis soll rauskommen:

1 SUMME-RE=0, SUMME-LS=0
2 SUMME-RE=0, SUMME-LS=0
...
32 SUMME-RE=0 SUMME-LS=100
...
35 SUMME-RE=0, SUMME-LS=800
...
38 SUMME-RE=0, SUMME-LS=1000
...
55 SUMME-RE=400, SUMME-LS=0
...
59 SUMME-RE=1500, SUMME-LS=0
...
akretschmer
Lösung akretschmer 18.12.2019 um 18:49:52 Uhr
Goto Top
du suchst GROUPING SETS:

test=*# select * from aximand ;
 betrag | r  | l  
--------+----+----
   1000 | 59 | 38
    500 | 59 | 35
    300 | 55 | 35
    100 | 55 | 32
(4 rows)

test=*# select r,l,sum(betrag) from aximand group by grouping sets((r,l),(r),(l),());
 r  | l  | sum  
----+----+------
    |    | 1900
 55 | 35 |  300
 59 | 35 |  500
 55 | 32 |  100
 59 | 38 | 1000
 55 |    |  400
 59 |    | 1500
    | 32 |  100
    | 38 | 1000
    | 35 |  800
(10 rows)
Aximand
Aximand 18.12.2019 aktualisiert um 19:38:13 Uhr
Goto Top
cooler Ansatz, damit spiele ich mal rum

Danke!!!!
em-pie
em-pie 18.12.2019 um 19:37:41 Uhr
Goto Top
Als Ergebnis soll rauskommen:

1 SUMME-RE=0, SUMME-LS=0
2 SUMME-RE=0, SUMME-LS=0
...
32 SUMME-RE=0 SUMME-LS=100
...
35 SUMME-RE=0, SUMME-LS=800
...
38 SUMME-RE=0, SUMME-LS=1000
...
55 SUMME-RE=400, SUMME-LS=0
...
59 SUMME-RE=1500, SUMME-LS=0
...


Und das klappt mit meinem obigen Beispiel nicht?

Du musst doch „nur“ zwei eigenständige gruppierte Tabellen bilden und die mit einem Full Outer Join verketten...

Oder kann deine DB2 auf der AS400 das nicht?
Aximand
Aximand 18.12.2019 um 19:40:10 Uhr
Goto Top
Das ist ein MS SQL, nicht DB2 ;)

Und leider hat dein Beispiel nicht funktioniert, das grouping sets liefert die Lösung
Kraemer
Kraemer 19.12.2019 um 06:54:55 Uhr
Goto Top
Zitat von @Aximand:

Das ist ein MS SQL, nicht DB2 ;)

Soviel zum Thema fehlende Infos. Raten im freien Fall...: