MSSQL: Summe in Gruppierung

rrobbyy

Mitglied
Hallo,

meine Rechere im Netzt brachte leider nicht den gewünschten Erfolg.

folgendes Problem(e):
Es exisitieren zwei Tabellen: ADRESSEN und STAOP. In der ADRESSEN sind Kunden mit ihren Daten enthalten. In STAOP liegen Information, ob Rechnungen bezahlt wurden oder nicht.

1. Ich möchte jetzt alle Kunden gruppiert nach PLZ (idealerweise Bereich 2*, 3*, etc), also eine Art Ranking, welches PLZ-Gebiet umsatzstark ist.
Folgendes Script klappt gut:

Code:
select a.KDNR, a.NAME, a.PLZ, b.BRUTTODM
from ADRESSEN AS a
JOIN STAOP AS b on a.KDNR = b.KUNDENNR
--GROUP BY a.PLZ

Wenn ich aber GROUP BY aus dem Kommentar nehme, kommt die Meldung:

Meldung 8120, Ebene 16, Status 1, Zeile 2
Die 'ADRESSEN.KDNR'-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.

Ich bekomme es einfach nich gebacken, dass die Gruppierung akzeptiert wird.

2. Ich möchte eine Liste mit allen Kunden inkl. der aufsummierten BruttoDM-Beträge.
Dafür wollte ich die SUM-Funktion verwenden, aber die kann ich anscheinend nicht so ohne weiteres verwenden.

vor ab, vielen Dank.

PS: stört euch bitte nicht an DM, darin liegen jetzt EURO-Werte...;)
 
Zuletzt bearbeitet:
Hi
1. Ich möchte jetzt alle Kunden gruppiert nach PLZ (idealerweise Bereich 2*, 3*, etc), also eine Art Ranking, welches PLZ-Gebiet umsatzstark ist.
Die Fehlermeldung gibt dir aber auch schon den Hinweis! ;)

Der Query, den du hier möchtest ist aber weniger sinnvoll, da du hier die Gruppierung auch weglassen kannst.
SQL:
select a.KDNR, a.NAME, a.PLZ, b.BRUTTODM
from ADRESSEN AS a
JOIN STAOP AS b on a.KDNR = b.KUNDENNR
GROUP BY a.PLZ, a.KDNR, a.NAME, b.BRUTTODM
Ich würde dir eher folgendes vorschlagen:
SQL:
select a.PLZ, sum(b.BRUTTODM) as sum
from ADRESSEN AS a
JOIN STAOP AS b on a.KDNR = b.KUNDENNR
GROUP BY a.PLZ
2. Ich möchte eine Liste mit allen Kunden inkl. der aufsummierten BruttoDM-Beträge.
Dafür wollte ich die SUM-Funktion verwenden, aber die kann ich anscheinend nicht so ohne weiteres verwenden.
SQL:
select a.NAME, sum(b.BRUTTODM) as sum
from ADRESSEN AS a
JOIN STAOP AS b on a.KDNR = b.KUNDENNR
GROUP BY a.NAME
 
supi, danke schön, klappt einwandfrei. analog hatte ich folgende lösung doch noch gedängelt:

Code:
SELECT KUNDENNR, SUM(BRUTTODM) as 'BRUTTO', ADRESSEN.NAME, ADRESSEN.STRASSE, ADRESSEN.PLZ, ADRESSEN.ORT
FROM STAOP
INNER JOIN ADRESSEN ON KUNDENNR = KDNR 
--WHERE ADRESSEN.PLZ like '2%'
group by KUNDENNR, ADRESSEN.NAME, ADRESSEN.STRASSE,ADRESSEN.PLZ,ADRESSEN.ORT

tatsächlich müssen in der gruppierung auch die spalten der select anweisung stehen. naja. wie du schon sagst, die meldung ist dahingehend recht eindeutig.


jetzt gehts aber leider weiter:
wie bekomme ich denn eine weitere Gruppierung hier rein? z.b. nach den ersten beiden PLZ-Zahlen?
Mein Ergbnis sieht folgendermaßen aus:

PLZ BRUTTO FIRMA
44557 8352.33 Obstmann
48653 493.75 Müller
49201 94477.67 Firma
55669 18965.22 Weihnachtsmann
99551 3503.03 Duck
99885 69804.51 Kowalke

gehen überhaupt mehrere gruppierungen?
 
jetzt gehts aber leider weiter:
wie bekomme ich denn eine weitere Gruppierung hier rein? z.b. nach den ersten beiden PLZ-Zahlen?
Mein Ergbnis sieht folgendermaßen aus:

PLZ BRUTTO FIRMA
44557 8352.33 Obstmann
48653 493.75 Müller
49201 94477.67 Firma
55669 18965.22 Weihnachtsmann
99551 3503.03 Duck
99885 69804.51 Kowalke

gehen überhaupt mehrere gruppierungen?

Ja tun Sie ich gehe jetzt mal davon aus das du auf die "beginnende PLZ" gruppieren willst

dementsprechend

SQL:
Select left (PLZ,1) as PLZBereich , sum(Brutto) as Gesamtbrutto 
From Tabelle 
Group by left (PLZ,1)

um es einfach zu halten kannst du statt Tabelle jetzt auch dein vorheriges Ergebnis in Klammern mit alias einfügen also mit dem Beispiel von Nico


SQL:
Select left (PLZ,1) as PLZBereich , sum(Brutto) as Gesamtbrutto 
FROM ( SELECT a.PLZ, sum(b.BRUTTODM) AS sum
              FROM ADRESSEN AS a
             JOIN STAOP AS b ON a.KDNR = b.KUNDENNR
              GROUP BY a.PLZ  ) as ErgbnisNico 
Group by left (PLZ,1)

Grüße Alex
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück