Seite 1 von 1
GROUP BY in der OO-Datenbank
Verfasst: Fr, 15.10.2010 18:35
von hr.hartwig
Hallo!
Ich habe eine einfache Termin-Tabelle.
Anzeigen möchte ich die Datensätze "Termine" <= "Heute" und "Erledigt" IS NULL
Die doppelt vorkommenden Kunden möchte ich natürlich nur ein mal anzeigen.
In MySQL schreib ich "GROUP BY `Kd_Nr`
In der OO-Datenbank bekomme ich die Fehlermeldung
"Not in aggregate function or group by clause"
Wie macht man das denn mit der OO-Datenbank?
Ich habe eine Beispieldatei mit angefügt.
Vielen Dank im Voraus für die Hilfe!
Gruß,
Hotti
Re: GROUP BY in der OO-Datenbank
Verfasst: Fr, 15.10.2010 19:15
von Barlee
Hallo hr.hartwig,
der Fehler kommt, wenn nicht alle beteiligten Spaltennamen in der GROUP BY Klausel aufgeführt werden.
z.B. erzeugt das einen Fehler:
Code: Alles auswählen
SELECT
Spalte_A,
Spalte_B,
SUM(Spalte_C) AS Spaltensumme
FROM Tabelle
GROUP BY
Spalte_A
Richtig dagegen:
Code: Alles auswählen
SELECT
Spalte_A,
Spalte_B,
SUM(Spalte_C) AS Spaltensumme
FROM Tabelle
GROUP BY
Spalte_A,
Spalte_B
Gruß Barlee
Re: GROUP BY in der OO-Datenbank
Verfasst: Fr, 15.10.2010 21:53
von hr.hartwig
Hallo Barlee,
vielen Dank für die Antwort, vor der ich sitze und versuche zu kapieren.
Aber sie erschließt sich mir nicht so ganz.
Denn wenn ich über alle Spalten gruppiere, müßen alle Inhalte der gruppierten Spalten gleich sein,
damit sie zu einer Zeile zusammengefasst werden.
Was ich aber möchte ist, daß nur gleiche "KD_Nr" zusammengefasst werden, auch wenn die Termine unterschiedlich sind.
Also:
KD_Nr 1, Termin 24.12.10
KD_Nr 1, Termin 04.03.09
KD_Nr 1 soll unabhängig vom Termin nur einmal angezeigt werden.
Wie bekommt man das hin?
Danke nochmal für die Hilfe.
Viele Grüße,
Hotti
Re: GROUP BY in der OO-Datenbank
Verfasst: Sa, 16.10.2010 01:29
von Barlee
Hallo Hotti,
sollte es Dir nur um die (nicht doppelte) Rückgabe der Spalte "KD_Nr 1" gehen, dann reicht ein
Code: Alles auswählen
SELECT DISTINCT "KD_Nr 1" FROM "Tabelle" WHERE "Termine" <= "CURRENT_DATE" und "Erledigt" IS NULL
Sollen allerdings Kundennummer und Termin ausgegeben werden, bei der eine (grafische) Gruppierung nach Kundennummer erfolgt, dann hast Du -zumindest in der OOo eigenen DB- auf Abfrageebene keine Möglichkeit, das umzusetzen. Eher auf Report-Ebene.
Nicht möglich:
KD Nr 1 Termin
1_______ 01.01.2010
________ 20.01.2010
2_______ 02.03.2010
________13.04.2011
________15.04.2011
Gruß Barlee
Re: GROUP BY in der OO-Datenbank
Verfasst: Sa, 16.10.2010 13:16
von hr.hartwig
Hallo Barlee,
vielen Dank für die Antwort.
Im Ernstfall wird natürlich Kd_Nr mit der Stammdatentabelle verbunden
um den entsprechenden Namen, Ort usw. anzuzeigen.
Da geht ein DISTINCT natürlich nicht mehr.
Zumindest habe ich gelernt, daß man -im Gegensatz zu MySQL- in der OO-Datenbank alle Felder
in die Gruppierung einbeziehen muß.
Noch mal vielen Dank für die Hilfe
Gruß,
Hotti
Re: GROUP BY in der OO-Datenbank
Verfasst: So, 17.10.2010 19:37
von DPunch
Aloha
hr.hartwig hat geschrieben:Im Ernstfall wird natürlich Kd_Nr mit der Stammdatentabelle verbunden
um den entsprechenden Namen, Ort usw. anzuzeigen.
Da geht ein DISTINCT natürlich nicht mehr.
Wieso geht das nicht?
Die Kd_Nr geht durch ein DISTINCT doch nicht verloren, wo ist das Problem?
Und wenn der Termin eh keine Rolle spielt, kriegst Du mit Barlees Vorschlag genau das Ergebnis, was Du brauchst.
hr.hartwig hat geschrieben:Zumindest habe ich gelernt, daß man -im Gegensatz zu MySQL- in der OO-Datenbank alle Felder
in die Gruppierung einbeziehen muß.
Es gibt abgesehen von MySQL glaube ich kein DBMS, dass diese (bei unbedachtem Einsatz potenziell fehlerbehaftete) Verwendung von GROUP BY zulässt.
Aber das Ergebnis, dass Du aus Deiner MySQL-Abfrage erhältst, lässt sich problemlos mit jedem "SQL-Dialekt" nachstellen.
Re: GROUP BY in der OO-Datenbank
Verfasst: So, 17.10.2010 22:47
von hr.hartwig
Hallo DPunch,
danke für Deine Antwort. Habs ausprobiert.
Bin von der falschen Annahme ausgegangen, daß DISTINCT nur bei einer Spaltenauswahl funktioniert.
Es gibt abgesehen von MySQL glaube ich kein DBMS, dass diese (bei unbedachtem Einsatz potenziell fehlerbehaftete) Verwendung von GROUP BY zulässt.
Da hast Du natürlich recht. Dessen war ich mir im Klaren.
Hätte aber in dem Fall nichts geschadet.
Jetzt zeige ich die Aufgabe und das Datum nicht an, dann klappt es und so ist es auch ok.
Vielen Dank nochmal an Dich und an Barlee,
viele Grüße,
Hotti