Abfrageergebnis in eine Zeile bringen

Andreas1981

Neuer Benutzer
Beiträge
2
Hallo!
Ich habe folgendes Statement:

SELECT distinct ap.aufnr,
(CASE WHEN ap.info NOT LIKE '%O%' THEN SUM(STCK) ELSE 0 END) AS NichtVersandt,
(CASE WHEN ap.info LIKE '%O%' THEN SUM(STCK) ELSE 0 END) AS Versandt,
SUM (ap.stck) AS Gesamt
FROM aufkopf ak INNER JOIN aufpos ap
ON ak.aufnr = ap.aufnr
WHERE ap.info Like '%S%' AND ak.kaufstatus not like '%f%'
GROUP BY ap.aufnr,ap.info


Als Ergebnis bekomme ich:

Aufnr Versandt Nicht Versandt Gesamt
12345 1 0 1
12345 2 0 2

Ergebnis sollte aber sein:

Aufnr Versandt Nicht Versandt Gesamt
12345 3 0 3

Was mache ich falsch, bzw. muss ich tun, damit ich nur eine Zeile pro Aufnr habe.
Schon mal vielen Dank im Voraus!

MfG
Andreas
 
Werbung:
AW: Abfrageergebnis in eine Zeile bringen

Da kann ich nur raten. Um besser zu helfen, möchten wir die ein paar Testdaten plus der Tabellenstrukturen.

Eine Idee wäre also folgendes..(siehe GROUP BY)

Code:
SELECT distinct ap.aufnr,(CASE WHEN ap.info NOT LIKE '%O%' THEN SUM(ap.STCK) 
                           ELSE 0 
                          END) AS NichtVersandt,
                         (CASE WHEN ap.info LIKE '%O%' THEN SUM(ap.STCK) 
                           ELSE 0 
                          END) AS Versandt,
                         SUM (ap.stck) AS Gesamt
  FROM aufkopf ak 
  JOIN aufpos ap
    ON ak.aufnr = ap.aufnr
 WHERE ap.info Like '%S%' AND ak.kaufstatus not like '%f%'
 GROUP BY ap.aufnr;

Grüße
Thomas
 
AW: Abfrageergebnis in eine Zeile bringen

Hallo Thomas,
danke für Deine antwort. Ich bekomme aber eine Fehlermeldung:
Die ap.info Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY Klasuel enthalten ist.
 
AW: Abfrageergebnis in eine Zeile bringen

Stimmt, da hast Du allerdings recht. Die ap.info muss im GROUP BY verbleiben.

Kannst Du ein kleines Beispiel zusammen stellen, damit ich das besser Nachvollziehen kann?

Grüße
Thomas
 
AW: Abfrageergebnis in eine Zeile bringen

Im Prinzip fällt mir noch was anderes auf. Warum ist der DISTINCT in der Select-Liste?

Eigentlich erzeugt der GROUP BY doch eine Gruppe über die Spalten "ap.aufnr" und "ap.info". Auf die weiteren Spalten kan per Agggratfunktion zugegriffen werden. Der DISNCT kann weg, würde ich behaupten.

Code:
SELECT ap.aufnr,(CASE WHEN ap.info NOT LIKE '%O%' THEN SUM(ap.STCK) 
                           ELSE 0 
                          END) AS NichtVersandt,
                         (CASE WHEN ap.info LIKE '%O%' THEN SUM(ap.STCK) 
                           ELSE 0 
                          END) AS Versandt,
                         SUM (ap.stck) AS Gesamt
  FROM aufkopf ak 
  JOIN aufpos ap
    ON ak.aufnr = ap.aufnr
 WHERE ap.info Like '%S%' AND ak.kaufstatus not like '%f%'
 GROUP BY ap.aufnr, ap.info;

Grüße
Thomas
 
Werbung:
AW: Abfrageergebnis in eine Zeile bringen

Hallo,
versuch es mal hiermit:

SELECT aufnr,SUM(NichtVersandt)AS NichtVersand,SUM(Versandt) AS Versand, SUM(Gesamt) AS Gesamt
FROM (Deine Abfrage)A
GROUP BY aufnr

Gruß Charly
 
Zurück
Oben