Zahlen nach Kriterien addieren
Moderator: Moderatoren
Zahlen nach Kriterien addieren
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
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
Re: Zahlen nach Kriterien addieren
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
-wenn das Projekt nicht mitbetrachtet werden soll, dann einfach weglassen; also:
Gruß Barlee
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
Code: Alles auswählen
SELECT Datum, Mitarbeiter, SUM(Stunden) AS Anz_Stunden
FROM Stunden
GROUP BY Datum, Mitarbeiter
Re: Zahlen nach Kriterien addieren
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?
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?
Re: Zahlen nach Kriterien addieren
Ja! Du musst alles, was keine Aggregatfunktion besitzt (Aggregatfunktionen sind z.B. SUM(), AVG() ) hinter dem "GROUP BY" aufführen.Siehst Du den Fehler?
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"
Re: Zahlen nach Kriterien addieren
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:
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"
Re: Zahlen nach Kriterien addieren
Hallo toby,
Am besten Du gibst ein paar (anonymisierte) Daten an, dann kann man das Verhalten besser analysieren.
Gruß Barlee
Die interne Datenbank HSQLDB erfordert es so. "Richtige" Datenbanken erlauben auch Abweichungen davon.Wieso gruppiere ich nach allen Spalten?
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.Frage ist nun, wieso klappt es bei den mehreren nicht.
Am besten Du gibst ein paar (anonymisierte) Daten an, dann kann man das Verhalten besser analysieren.
Gruß Barlee
Re: Zahlen nach Kriterien addieren
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?)?
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?)?
Re: Zahlen nach Kriterien addieren
hinter GROUP BY musst Du nur alles angeben, was mit SELECT auch ausgewählt wurde. (bis auf die SUM() )
Re: Zahlen nach Kriterien addieren
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.
Re: Zahlen nach Kriterien addieren
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.
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.
Re: Zahlen nach Kriterien addieren
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
aber jetzt geh ich erstmal schlafen. gute nacht und danke für Deine Hilfe.
wird sicher nicht meine letzte Frage gewesen sein,...

t