SQL-Anweisung geht nicht:-(
ARIE
- programmiertechnik
0 Daniela Koller0 arie
Hallo Leute,
ich habe ein Problem und zwar die SQL bringt mir eine Fehlermeldung
"kein Group by" :-((((
hier meine SQL:
select VORGABE_GRUPPE.GRUPPE,VORGABE_GRUPPE.BEZEICHNUNG,
TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY')DATUM,
MITARBEITER.PERSONALNUMMER,MITARBEITER.NAME,MITARBEITER.STAMMKST,
SUM(ZEIT.STUNDEN)
from VORGABE_GRUPPE,BRUTTOLOHN,MITARBEITER,ZEIT
WHERE VORGABE_GRUPPE.GRUPPE=BRUTTOLOHN.LGRUPPE
AND ZEIT.STAMMGRUPPE=BRUTTOLOHN.LGRUPPE
AND VORGABE_GRUPPE.GRUPPE='080'
AND MITARBEITER.PERSONALNUMMER=ZEIT.PERSONALNUMMER
GROUP BY VORGABE_GRUPPE.GRUPPE,MITARBEITER.PERSONALNUMMER
FEHLER in Zeile 1:
ORA-00979: kein GROUP BY-Ausdruck
Hi Arie
ich habe ein Problem und zwar die SQL bringt mir eine Fehlermeldung
"kein Group by" :-((((
http://aktuell.de.selfhtml.org/tippstricks/datenbanken/having/index.htm
Sämtliche nicht nach Group By aufgeführten Felder, müssen eine Aggregationsfunktion
benutzen.
hier meine SQL:
select VORGABE_GRUPPE.GRUPPE,VORGABE_GRUPPE.BEZEICHNUNG,
TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY')DATUM,
MITARBEITER.PERSONALNUMMER,MITARBEITER.NAME,MITARBEITER.STAMMKST,
SUM(ZEIT.STUNDEN)
GROUP BY VORGABE_GRUPPE.GRUPPE,MITARBEITER.PERSONALNUMMER
2 im Group By, 6 ohne Aggregatsfunktion im Select.
Gruss Daniela
Hi Daniela
hier meine SQL:
select VORGABE_GRUPPE.GRUPPE,VORGABE_GRUPPE.BEZEICHNUNG,
TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY')DATUM,
MITARBEITER.PERSONALNUMMER,MITARBEITER.NAME,MITARBEITER.STAMMKST,
SUM(ZEIT.STUNDEN)GROUP BY VORGABE_GRUPPE.GRUPPE,MITARBEITER.PERSONALNUMMER
2 im Group By, 6 ohne Aggregatsfunktion im Select.
und was heißt das jetzt??sorry bin Anfänger:-(
Grüße Arie
Hallo Arie,
select VORGABE_GRUPPE.GRUPPE,VORGABE_GRUPPE.BEZEICHNUNG,
TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY')DATUM,
MITARBEITER.PERSONALNUMMER,MITARBEITER.NAME,MITARBEITER.STAMMKST,
SUM(ZEIT.STUNDEN)
GROUP BY VORGABE_GRUPPE.GRUPPE,MITARBEITER.PERSONALNUMMER
2 im Group By, 6 ohne Aggregatsfunktion im Select.
und was heißt das jetzt??sorry bin Anfänger:-(
Die Spalten
VORGABE_GRUPPE.BEZEICHNUNG,
TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY')DATUM,
MITARBEITER.NAME,
MITARBEITER.STAMMKST,
weisen keine Aggregatsfunktion wie z.B:
SUM(ZEIT.STUNDEN)
auf
und tauchen auch nicht in GROUP BY auf
Gruss,
Vinzenz
Hi Arie
und was heißt das jetzt??sorry bin Anfänger:-(
Ganz genau deswegen stand der Link da, da hab ich es einmal
beschrieben wie und warum es so ist damit ich nicht jedesmal
lange Erklärungstexte schreiben muss sondern einfach Linken
kann.
Gruss Daniela
Hallo Daniela!
Dieses Problem war mir gar nicht bewußt ;-)
Aber was mache ich, wenn ich 2 Tabellen habe:
Bestellungen
artikel
kunden_id
preis
Kunden
kunden_id
name
Wenn ich jetzt mit GROUP BY für alle Kunden die Summen Ihrer Bestelluneg auflisten will, aber gleichzeitig die Namen mit der Abfrage mit auslesen möchte, also
SELECT
Kunden.name,
sum(Bestellungen.preis) AS summe
FROM
Bestellungen
LEFT JOIN
Kunden
ON
Bestellungen.kunden_id = Kunden.kunden_id
GROUP BY
Bestellungen.kunden_id
Das geht zwar in MySQL, aber wohl nicht überall. Müßte ich dann Kunden.name mit in GROUP BY aufnehemnb oder was?
SELECT
Kunden.name,
sum(Bestellungen.preis) AS summe
FROM
Bestellungen
LEFT JOIN
Kunden
ON
Bestellungen.kunden_id = Kunden.kunden_id
GROUP BY
Bestellungen.kunden_id,
Kunden.name
oder wie macht man das?
Grüße
Andreas
Hi Andreas
SELECT
Kunden.name,
sum(Bestellungen.preis) AS summe
FROM
Bestellungen
LEFT JOIN
Kunden
ON
Bestellungen.kunden_id = Kunden.kunden_id
GROUP BY
Bestellungen.kunden_id,
Kunden.nameoder wie macht man das?
Ja, genau so, macht ja auch keinen Unterschied da eine
kunden_id nur ein Name haben kann. Bei einigen RDBMS
wird die kunden_id auch noch in den Select hoch müssen.
Gruss Daniela
Lösung mit Performanc optimierung (wenn die Schlüssel und Indexe richtig gesetzt sind):
SELECT
VORGABE_GRUPPE.GRUPPE,
VORGABE_GRUPPE.BEZEICHNUNG,
TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY') AS DATUM,
MITARBEITER.PERSONALNUMMER,
MITARBEITER.NAME,
MITARBEITER.STAMMKST,
SUM(ZEIT.STUNDEN)
FROM VORGABE_GRUPPE
INNER JOIN BRUTTOLOHN ON VORGABE_GRUPPE.GRUPPE = BRUTTOLOHN.LGRUPPE
INNER JOIN ZEIT ON ZEIT.STAMMGRUPPE = BRUTTOLOHN.LGRUPPE
INNER JOIN MITARBEITER ON MITARBEITER.PERSONALNUMMER = ZEIT.PERSONALNUMMER
WHERE VORGABE_GRUPPE.GRUPPE = '080'
GROUP BY
VORGABE_GRUPPE.GRUPPE,
VORGABE_GRUPPE.BEZEICHNUNG,
MITARBEITER.PERSONALNUMMER,
MITARBEITER.NAME,
MITARBEITER.STAMMKST
Allerdings würde noch fehler auftreten wenn MITARBEITER.STAMMKST ein Bit fällt ist.
MfG Arndt