Zahlen nach Kriterien addieren

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

tobydom
***
Beiträge: 74
Registriert: Di, 23.09.2003 16:38

Zahlen nach Kriterien addieren

Beitrag von tobydom »

Hallo
ich habe nochmal eine Frage.

Nachwievor habe ich drei Tabellen:
1. Mitarbeiter
2. Projekte
3. Stunden

In einer Abfrage und anschließend in einem Bericht möchte ich als Ergebnis eine Tabelle oder wenn das nicht geht eine Auflistung haben, aus der ich sehen kann, wieviele Stunden jeder einzelne Mitarbeiter an einem Tag gearbeitet hat, auch wenn er an verschiedenen Projekten tätig war.

In der Tabelle 'Stunden' könnten zb folgende Einträge stehen:
10.02.2010 Mitarbeiter1 Projekt23 4Stunden
10.02.2010 Mitarbeiter1 Projekt25 3Stunden
11.02.2010 Mitarbeiter1 Projekt23 8Stunden
10.02.2010 Mitarbeiter2 Projekt23 2Stunden
10.02.2010 Mitarbeiter2 Projekt25 6Stunden
11.02.2010 Mitarbeiter2 Projekt25 8Stunden

Das heißt, dass meine Abfrage die richtigen Stunden addieren muss. Die richtigen heißt, alle Stunden eines Mitarbeiters an einem Tag. Es muss also zwei Überpfüfungen geben. Die des Mitarbeiters und die des Tages.

Und nun bin ich mit meinem Latein schon wieder am Ende.
Wie mache ich das?
Kannst Du mir nochmal helfen, oder irgendjemand anders?
Vielen Dank,
toby
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Zahlen nach Kriterien addieren

Beitrag von Barlee »

Hallo Toby,

das macht man mit Gruppierung. Ich gehe mal davon aus, dass nicht z.B. "8Stunden" in der entsprechenden Spalte steht, sondern nur eine "8"
Angenommen, die Spalten Deiner Tabelle heißen Datum, Mitarbeiter, Projekt, Stunden

Code: Alles auswählen

SELECT Datum, Mitarbeiter, Projekt, SUM(Stunden) AS Anz_Stunden
FROM Stunden
GROUP BY Datum, Mitarbeiter, Projekt
-wenn das Projekt nicht mitbetrachtet werden soll, dann einfach weglassen; also:

Code: Alles auswählen

SELECT Datum, Mitarbeiter, SUM(Stunden) AS Anz_Stunden
FROM Stunden
GROUP BY Datum, Mitarbeiter
Gruß Barlee
tobydom
***
Beiträge: 74
Registriert: Di, 23.09.2003 16:38

Re: Zahlen nach Kriterien addieren

Beitrag von tobydom »

Hallo Barlee,
vielen Dank für die abermals schnelle Antwort.
Irgendwie wills mir aber nicht glücken.

Mein SQL-Text sieht nun folgendermaßen aus:
SELECT "Stunden"."Datum" AS "Datum", "Stunden"."Projektnummer" AS "Projektnummer", SUM( "Stunden"."Arbeitsstunden" ) AS "Anz_Arbeitsstunden", "Stunden"."Kurzarbeit" AS "Kurzarbeit", "Stunden"."Fehlzeiten" AS "Fehlzeiten", "Stunden"."Krankheit" AS "Krankheit", "Stunden"."Urlaub" AS "Urlaub", "Stunden"."Feiertag" AS "Feiertag", "Stunden"."Erläuterung" AS "Erläuterung", "Stunden"."STD-ID" AS "STD-ID", "Stunden"."Mitarbeiter-ID" AS "Mitarbeiter-ID", "Mitarbeiter"."Nachname" AS "Nachname", "Mitarbeiter"."Vorname" AS "Vorname", "Mitarbeiter"."Geburtstag" AS "Geburtstag", "Mitarbeiter"."Position" AS "Position", "Mitarbeiter"."Stundenlohn" AS "Stundenlohn", "Mitarbeiter"."Stundensoll" AS "Stundensoll" FROM "Stunden", "Mitarbeiter" WHERE "Stunden"."Mitarbeiter-ID" = "Mitarbeiter"."Mitarbeiter-ID" GROUP BY "Datum", "Mitarbeiter-ID", "Projektnummer"

und ich bekomme eine Fehlermeldung:
Die Dateninhalte konnten nicht geladen werden
Not in aggregate function or group by clause: org.hsqldb.Expression@53be7c in Statement[SELECT .......]

Siehst Du den Fehler?
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Zahlen nach Kriterien addieren

Beitrag von Barlee »

Siehst Du den Fehler?
Ja! Du musst alles, was keine Aggregatfunktion besitzt (Aggregatfunktionen sind z.B. SUM(), AVG() ) hinter dem "GROUP BY" aufführen.
Probier mal und gib Bescheid, wenn ok.

Code: Alles auswählen

...GROUP BY "Stunden"."Datum", "Stunden"."Projektnummer", "Stunden"."Kurzarbeit", "Stunden"."Fehlzeiten", "Stunden"."Krankheit", "Stunden"."Urlaub" , "Stunden"."Feiertag", "Stunden"."Erläuterung", "Stunden"."STD-ID", "Stunden"."Mitarbeiter-ID", "Mitarbeiter"."Nachname", "Mitarbeiter"."Vorname", "Mitarbeiter"."Geburtstag", "Mitarbeiter"."Position", "Mitarbeiter"."Stundenlohn", "Mitarbeiter"."Stundensoll"
Gruß Barlee
tobydom
***
Beiträge: 74
Registriert: Di, 23.09.2003 16:38

Re: Zahlen nach Kriterien addieren

Beitrag von tobydom »

hi
also:
1. verstanden hab ichs noch nicht. Wieso gruppiere ich nach allen Spalten?
2. die Fehlermeldung ist weg und die Ergebnisse der Abfrage werden angezeigt, allerdings die Stunden eines Tages werden nicht addiert
3. ich habe den sql-befehl mal verkürzt (einige Spalten rausgenommen) und dann ging's
4. Frage ist nun, wieso klappt es bei den mehreren nicht.

Hier der aktuelle AQL-befehl:

Code: Alles auswählen

SELECT "Stunden"."Datum" AS "Datum", "Stunden"."Projektnummer" AS "Projektnummer", SUM( "Stunden"."Arbeitsstunden" ) AS "Anz_Arbeitsstunden", "Stunden"."Kurzarbeit" AS "Kurzarbeit", "Stunden"."Fehlzeiten" AS "Fehlzeiten", "Stunden"."Krankheit" AS "Krankheit", "Stunden"."Urlaub" AS "Urlaub", "Stunden"."Feiertag" AS "Feiertag", "Stunden"."Erläuterung" AS "Erläuterung", "Stunden"."STD-ID" AS "STD-ID", "Stunden"."Mitarbeiter-ID" AS "Mitarbeiter-ID", "Mitarbeiter"."Nachname" AS "Nachname", "Mitarbeiter"."Vorname" AS "Vorname", "Mitarbeiter"."Geburtstag" AS "Geburtstag", "Mitarbeiter"."Position" AS "Position", "Mitarbeiter"."Stundenlohn" AS "Stundenlohn", "Mitarbeiter"."Stundensoll" AS "Stundensoll" FROM "Stunden", "Mitarbeiter", "Bauvorhaben" WHERE "Stunden"."Mitarbeiter-ID" = "Mitarbeiter"."Mitarbeiter-ID" AND "Stunden"."Projektnummer" = "Bauvorhaben"."Projektnummer" GROUP BY "Stunden"."Datum", "Stunden"."Projektnummer", "Stunden"."Kurzarbeit", "Stunden"."Fehlzeiten", "Stunden"."Krankheit", "Stunden"."Urlaub", "Stunden"."Feiertag", "Stunden"."Erläuterung", "Stunden"."STD-ID", "Stunden"."Mitarbeiter-ID", "Mitarbeiter"."Nachname", "Mitarbeiter"."Vorname", "Mitarbeiter"."Geburtstag", "Mitarbeiter"."Position", "Mitarbeiter"."Stundenlohn", "Mitarbeiter"."Stundensoll"
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Zahlen nach Kriterien addieren

Beitrag von Barlee »

Hallo toby,
Wieso gruppiere ich nach allen Spalten?
Die interne Datenbank HSQLDB erfordert es so. "Richtige" Datenbanken erlauben auch Abweichungen davon.
Frage ist nun, wieso klappt es bei den mehreren nicht.
Welche Spalten hast Du denn jetzt weggelassen? Vermutlich hat eine dieser Spalten immer wechselnde Daten, über die sich nicht gruppieren lässt bzw. dieses somit nicht zum gewünschten Ergebnis führt. Aggregieren heißt immer, gleiche Inhalte zusammenzufassen. Beinhaltet nun eine Spalte in jeder Zeile andere Werte (z.B. eine ID als laufende Nummer), dann kann nichts zusammengefasst werden. Folglich wird nichts summiert.

Am besten Du gibst ein paar (anonymisierte) Daten an, dann kann man das Verhalten besser analysieren.

Gruß Barlee
tobydom
***
Beiträge: 74
Registriert: Di, 23.09.2003 16:38

Re: Zahlen nach Kriterien addieren

Beitrag von tobydom »

und was mache ich mit den Spalten die nicht gruppiert werden können, wenn ich doch alle spalten hinter "group by" angeben muss?
Muss ich dann eine Abfrage erstellen, die die gruppierten Daten enthält und eine weitere mit den übrigen und dann in meinem Bericht die Daten aus zwei Abfragen ziehen (und geht das überhaupt?)?
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Zahlen nach Kriterien addieren

Beitrag von Barlee »

hinter GROUP BY musst Du nur alles angeben, was mit SELECT auch ausgewählt wurde. (bis auf die SUM() )
tobydom
***
Beiträge: 74
Registriert: Di, 23.09.2003 16:38

Re: Zahlen nach Kriterien addieren

Beitrag von tobydom »

ah... ich glaube ich fange an zu verstehen....alles was sich gruppieren lässt wird auch gruppiert, alle übrigen müssen auch summiert werden. oder? Sonst macht die Angabe zB von einem Feld in dem j oder nein steht, in einer gruppierung keinen sinn mehr.... ich probiers gleich mal aus.
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Zahlen nach Kriterien addieren

Beitrag von Barlee »

Deine Schlußfolgerung ist richtig.

Zu den Spalten, die sich nicht gruppieren lassen: Klar, Du kannst zwei Unterabfragen erstellen, die Du wiederum miteinander verbindest.
Für konkrete Vorschläge muss man hier aber die genaue Tabellenstruktur und ein Beispiel für das erwartete Ergebnis kennen. Ansonsten wird's schwierig.
tobydom
***
Beiträge: 74
Registriert: Di, 23.09.2003 16:38

Re: Zahlen nach Kriterien addieren

Beitrag von tobydom »

ich werd jetzt erstmal weiter rumprobieren und mich melden, wenn ich ein ergebnis habe.
aber jetzt geh ich erstmal schlafen. gute nacht und danke für Deine Hilfe.
wird sicher nicht meine letzte Frage gewesen sein,... ;-)

t
Antworten