PDA

View Full Version : SQL: SUM über UNION



marty
13-04-11, 09:33
Hallo zusammen,

ich habe folgendes Konstrukt:
SELECT KNR, sum(Zahl1), sum(Zahl2)
FROM (
(SELECT KNR, 0 as Zahl1, count(*) as Zahl2...)
UNION ALL
(SELECT KNR, count(*) as Zahl1, 0 as Zahl2...)
)
GROUP BY KNR

Wenn ich nur das Statement in den Klammern ausführe funktioniert es. Das gesamte Statement aber nicht, es kommt immer SQL-Error 37000. Ich finde aber den Syntaxfehler nicht.
Hat jemand eine Idee? Ich hab auch schon versucht einen Alias über die Union zu vergeben, das ändert aber nix am Fehler.

Pikachu
13-04-11, 10:07
Gib dem FROM (...) mal einen Namen mit AS IRGENDWAS vor dem GROUP BY.

Fuerchau
13-04-11, 10:27
Da sind gleich mehrere Fehler auf einmal:

Sobald Aggregate verwendet werden ist ein "group by" erforderlich.
Eine "derived Table" beginnt nicht mit einer eigenen Klammer und muss einen Namen bekommen.

Richtig ist also:

SELECT KNR, sum(Zahl1), sum(Zahl2)
FROM (
SELECT KNR, sum(0) as Zahl1, count(*) as Zahl2...
group by KNR
UNION ALL
SELECT KNR, count(*) as Zahl1, sum(0) as Zahl2...
group by KNR
) as MyTable
GROUP BY KNR

marty
13-04-11, 10:47
Da sind gleich mehrere Fehler auf einmal:
Sobald Aggregate verwendet werden ist ein "group by" erforderlich.
Eine "derived Table" beginnt nicht mit einer eigenen Klammer und muss einen Namen bekommen.

Das GROUP BY steht jeweils schon drin, ich hab's nur weg gelassen damit es lesbarer wird. Die Klammern sind so gesetzt weil die subselects jeweils wieder subselects verwenden - aber ich habe jetzt meinen Fehler gefunden, es war tatsächlich einfach die Bechstaben verwuchselt ;-)