Anmelden

View Full Version : Verständnisfrage SQL -> Group by



Seiten : [1] 2

KingofKning
21-09-18, 09:25
Hallo *all,
ich habe hier eine Tabelle mit 20 Feldern wo ich bei 5 Feldern eine Summe bilden muß.

Für die Summenbildung brauche ich ja ein "group by".

das heißt dann aber leider auch das ich alle 15 Felder in der Reihenfolge der Gruppierung aufnehmen muß.

Aber ich möchte ja nicht alle 15 Felder als Kriterium haben sondern eigentlich nur 3.
Mache ich einen Denkfehler oder ist das so.

GG 4270

Fuerchau
21-09-18, 09:28
Das ist der Vorteil von SQL, dass du nur verwendest was du brauchst (im Gegensatz zu Direktzugriffen).
Also einfach mal per STRSQL versuchen und dann embedded verwenden:

select g1, g2, ..., gn, sum(v1) as v1, sum(v2) as v2, ...
from mytable
group by g1, g2, ..., gn

KingofKning
21-09-18, 10:08
Ich poste zum besseren Verständnis mal die Abfrage. (Warum beim Antworten die option Code einfügen fehlt weiß wohl auch keine)
[CODDE]
select TETENR as Teilenummer,
TEMCD4 as Matchcodefeld,
STST29 as Produktart,
STID2 as Umsatz_Identnummer,
sum(stwt01) as Menge,
sum(stwt02) as Nettowert,
sum(stwt03) as Herstellkosten,
sum(stwt04) as Nettogewicht,
sum(stwt05) as Deckungsbeitrag,
sum(stwt06) as Berechnete_Menge,
sum(stwt07) as Netto_Pos_Wert,
stsa04 as Vertreter_Anforderer,
stsx04 as Vertreter_Anforderer,
stsa06 as Verkaufsleiter_Genehmiger,
stsa08 as Laenderstatistikcode,
stst01 as Artikel_Verbrauchergruppe,
stst08 as Artikelart,
STHKKZ as Herstellkosten,
test09 as Kontierungsschluessel,
TEST29 as Produktart,
Test31 as Warengruppe,
test32 as Produktsschl_Heinze,
test34 as Produktgruppe,
test35 as Material_Art,
AD##21 as Verkaeufer,
ad##26 as Konzern,
ad##27 as Verband
from aruba_msvc/arusta01jn
where stfa = 1
and stsaar <> '1'
and stplis = 2
and test09 <> 602
and STMOAN = 20180812
group by stid2, tetenr, temcd4, stst29, stsa04, stsx04, stsa06, stsa08, stst01, stst08, STHKKZ, test09, TEST29, Test31, test32, test34, test35, AD##21, ad##26, ad##27
[/CODE]

Die ganzen Felder by group by muß ich ja angeben damit er nicht motzt.
Eigentlich will ich nur eine Gruppierung nach stid2 und tetenr.

GG 4270

dschroeder
21-09-18, 10:16
Wenn nur nach stid2 und tetenr gruppieren willst, müsste doch folgendes reichen, oder?:



select TETENR as Teilenummer, STID2 as Umsatz_Identnummer,
sum(stwt01) as Menge,
sum(stwt02) as Nettowert,
sum(stwt03) as Herstellkosten,
sum(stwt04) as Nettogewicht,
sum(stwt05) as Deckungsbeitrag,
sum(stwt06) as Berechnete_Menge,
sum(stwt07) as Netto_Pos_Wert,
from aruba_msvc/arusta01jn
where stfa = 1
and stsaar <> '1'
and stplis = 2
and test09 <> 602
and STMOAN = 20180812
group by stid2, tetenr

KingofKning
21-09-18, 10:43
Nein, dann meckert er ja das Felder fehlen...
sieht dann z.B. so aus: Spalte AD##21 oder Ausdruck in SELECT-Liste nicht gültig.

malzusrex
21-09-18, 10:59
Alle Felder die du im Select hast, müssen auch in group by auftauchen

Gruß
Ronald

Wenn du auf ERWEITERT klickst, dann hast du auch wieder den Button für CODE beim Antworten

Pikachu
21-09-18, 11:05
Welcher Wert soll in Spalte AD##21 angezeigt werden, wenn nicht alle Datensätze, die zu einer Summe zusammengefaßt werden, in dieser Spalte denselben Wert haben?


Nein, dann meckert er ja das Felder fehlen...
sieht dann z.B. so aus: Spalte AD##21 oder Ausdruck in SELECT-Liste nicht gültig.

dschroeder
21-09-18, 11:06
In meinem geposteten Beispiel kommt ad##21 nicht vor. Da kann eigentlich kein Meckern kommen. Das Komma hinter Netto_pos_wert muss aber weg.

KingofKning
21-09-18, 11:21
In meinem geposteten Beispiel kommt ad##21 nicht vor. Da kann eigentlich kein Meckern kommen. Das Komma hinter Netto_pos_wert muss aber weg.

Ja aber Mecker kommt dann von meinem Chef warum er statt 20 Felder nur 9 hat. Kann ja nicht die Lösung sein.

KingofKning
21-09-18, 11:34
Tja, in der Summe sind das 300.000 Datensätze die verdichtet werden sollen.
Ich will aber die Summe nur auf Haupt-Rechnungsempfänger und die Artikel haben.
Nicht aber z.B. auf den Verkäufer der ja naturgemäß für jeden Unter-Rechnungsempfänger unterschiedlich ist.

Aber vermutlich muß man dann 2 SQL-Abfragen machen.


GG 4270