SQL Subselect Ergebnisse zusammen führen

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.412
Moin moin,

leider ist SQL nicht mein aller bestes Steckenpferd.... Ich habe eine SQL Abfrage mit Subselect und bekomme auch die Ergebnisse zurück die ich benötige, leider gelingt es mir nicht die Redundanzen einfach zusammen zu führen in einen Datensatz jeweils.

Hier ist mal mein Statement:
Code:
SELECT k.Kundennumm Kundennummer, k.Name, re.Artikelnum Artikelnummer, 
             re.Bezeichnun Bezeichnung, re.Anzahl, re.Summe, re.Monat, re.Jahr
FROM
(    
    SELECT Kundennumm, Artikelnum, Bezeichnun, Sum(Anzahl) AS Anzahl, Sum(Summe) AS Summe, Month(Datum) AS Monat, Year(Datum) AS Jahr
    FROM Reposten
    WHERE Datum BETWEEN '01.01.2018' AND '31.12.2018'
    GROUP BY Kundennumm, Artikelnum, Bezeichnun, Datum
)re, Kunde k

WHERE re.kundennumm = k.kundennumm

Als Ergebnis kommt sowas raus wie:
Kundennummer Name Artikelnummer Bezeichnung Anzahl Summe Monat Jahr
000049 Bla 123456 Blub 200 2000,00 9 2018
000049 Bla 123456 Blub 400 4000,00 9 2018

Nun hätte ich gerne, das das Ganze zu einer Zeile zusammen gefügt wird, da ja der Kunde der gleiche ist der Monat und das Jahr sowie auch Artikelnummer. Leider habe ich einfach nicht das Talent und ein Brett vorm Kopf. Ich meine das müsste ja mit einem Union All gehen, nur wird es für mich immer undurchsichtiger je tiefer der SQL Befehl wird...
 
UNION

select a,b from c
union
select a,b from d

ergibt eine Ergebnistabelle mit den Spalten a und b.
Ergänzung ()

Damit kannst du alle Posten eines Kunden untereinander aufzählen.

Aber in eine Zeile verschiedene Ergebnisse packen ... wüsste nicht wie das gehen soll.
 
Die Ergebnisse sind ja meinst identisch, wie im Beispiel oben.

Also Kundennummer, Name, Artikel, Monat Jahr gleich nur die Summe muss aufkumuliert werden.
Ich habe das Ganze zuvor in einem Join gemacht, da geht das, nur leider lässt das Programm in dem ich das brauche die Joins nicht richtig zu in der grafischen Darstellung hinterher...

Die die andere Sache ist dein Beispiel funktioniert nicht, weil es nicht alle Spalten in beiden Tabellen gibt.
In Tabelle reposten gibt es z.B. nur die Kundennumm Spalte, nicht aber die Name Spalte
 
Wie gesagt, das geht bestimmt. Allerdings wird das sehr kompliziert, alles in eine Zeile zu packen, weil du im Prinzip pro Posten ne eigene Abfrage brauchen wirst. Da dort keine feste Anzahl vorhanden ist, fällt mir spontan nix dazu ein.
 
Du bekommst zwei Ergebnisse, da Du nach dem Datum gruppierst.
Du solltest nach Jahr und Monat gruppieren, dann bekommst Du alle Aufträge des Kunden in einem Monat in einer Zeile zusammengefasst:
Code:
[...]
GROUP BY Kundennumm, Artikelnum, Bezeichnun, YEAR (Datum), MONTH (Datum)
[...]
 
Zuletzt bearbeitet: (Typo)
  • Gefällt mir
Reaktionen: PEASANT KING
So Simpel vielen Dank @AgiOli funktioniert einwandfrei, hätte mir eigentlich auch einfallen müssen.
 
Schöner wäre es, Du würdest noch mit einem Join arbeiten:
Code:
SELECT r.Kundennumm
      ,MIN (k.Name) as Name
      ,r.Artikelnum
      ,MIN (r.Bezeichnun) as Bezeichnung
      ,Sum(Anzahl) AS Anzahl
      ,Sum(Summe) AS Summe
      ,Month(Datum) AS Monat
      ,Year(Datum) AS Jahr
  FROM Reposten r
    FULL OUTER JOIN Kunde k
      ON k.kundenumm = r.kundennumm
WHERE Datum BETWEEN '01.01.2018' AND '31.12.2018'
GROUP BY r.Kundennumm, r.Artikelnum, YEAR (Datum), MONTH (Datum)
 
Ja ich hatte zuvor einen Join da ging auch alles. Problem, die Software in der ich das Script hinterlegen muss hinter einer View, lässt dann, die anschließende Tabelle die angezeigt wird nicht mehr nach Spalten sortieren, oder in Spalten mittels Suche suchen.
 
Ach quark ;)
 
Zurück
Oben