Seite 1 von 1
Abfrage bei mehreren Boolean-Feldern
Verfasst: Mi, 02.04.2014 13:11
von Yaddayadda
Hallo,
ich habe eine Tabelle in folgender Form:
ID | Montag | Dienstag | Mittwoch | Donnerstag | Freitag
---------------------------------------------------------------------
1.....TRUE........................TRUE........... TRUE
2.....TRUE.......TRUE
3.....................TRUE...........TRUE..............................TRUE
Es geht um die Anwesendheit von Personen an bestimmten Tagen. Die Wochentage sind dabei Boolean-Felder. So weit, so gut. Nun brauche ich aber auch eine Abfrage, die mir auflistet, welche Personen an welchen Tagen da sind, also so etwas:
Montag: Person1, Person2
Dienstag: Person 2, Person3
Mittwoch: Person1, Person3
Donnerstag: Person1
Freitag: Person3
Das schaffe ich eigentlich auch, allerdings immer nur für 1 Tag, sprich ich brauche für jeden Wochentag eine eigene Abfrage. Wie kann ich diese 5 Abfragen zusammenfassen? Ich hätte es gerne als 1 Abfrage, da man im Report Builder ja immer nur 1 Abfrage als Grundlage nehmen kann, ich möchte aber gerne alle Wochentage zusammen aufgelistet haben.
Wer kennt sich aus und kann mir helfen?
Danke und Gruß,
yaddayadda
Re: Abfrage bei mehreren Boolean-Feldern
Verfasst: Mi, 02.04.2014 19:33
von RobertG
Hallo Yaddayadda,
geht so etwas nicht direkt über die Gruppierungsfunktion im Report-Builder? Wie gestaltest Du denn die Abfrage, wenn Du z.B. nur den Montag zusammenfasst? Die Felder ID sollen die Personen darstellen, oder?
Hilfreich wäre eine einfache DB mit einer Starttabelle. Dann könnten andere sehen, was Du bereits getestet hat und müssten nicht so eine Konstruktion nachbauen.
Gruß
Robert
Re: Abfrage bei mehreren Boolean-Feldern
Verfasst: Mi, 02.04.2014 20:01
von Yaddayadda
Die Abfrage habe ich so gestaltet:
Code: Alles auswählen
SELECT "Essenstage"."ID" AS "ID", "Essenstage"."Montag" AS "Montag", "Stammdaten"."Vorname" FROM "Essenstage" AS "Essenstage", "Stammdaten" AS "Stammdaten" WHERE "Essenstage"."ID" = "Stammdaten"."ID" AND "Essenstage"."Montag" = 1
Damit bekomme ich eine Tabelle mit den Spalten "Personen-ID", "Vorname" (aus der Tabelle Stammdaten) und "Montag", wobei letztere nur jeweils den Wert 1, also TRUE, aufweist.
Wie sollte ich da noch was gruppieren?
Gruß,
yaddayadda
P.S.: Ich schau mal, ob ich ne Beispieldatenbank hinbekomme...
Re: Abfrage bei mehreren Boolean-Feldern
Verfasst: Mi, 02.04.2014 21:42
von F3K Total
Hi,
ich empfehle dir, die Tage nicht nebeneinander, sondern untereinander zu schreiben, siehe Anlage.
Gruß R
Re: Abfrage bei mehreren Boolean-Feldern
Verfasst: Do, 03.04.2014 08:24
von Yaddayadda
Hm, so was hatte ich schon befürchtet. Also gibt es keine Möglichkeit, im Formular für die Tagauswahl diese praktischen Markierfelder zu verwenden!? Finde diese TableGrids optisch so... ähm... bescheiden. *seufz*
Re: Abfrage bei mehreren Boolean-Feldern
Verfasst: Do, 03.04.2014 17:50
von RobertG
Hallo Yaddayadda,
ähnliches wie R habe ich mir auch gedacht, aber da es sich um einen endlichen Zeitraum handelt (eine Woche) könnten da natürlich auch einzelne Felder draus gemacht werden. Nur den Schlüssel dieser Tabelle würde ich umstellen - oder Woche und Jahr irgendwo darin erkennbar werden lassen.
Erste Zugriff, kann nur eine Woche:
Code: Alles auswählen
SELECT "a"."TagID", "a"."ID", (SELECT "Vorname" FROM "Stammdaten" WHERE "ID" = "a"."ID" AND "a"."Montag" = 1) AS "Montag", (SELECT "Vorname" FROM "Stammdaten" WHERE "ID" = "a"."ID" AND "a"."Dienstag" = 1) AS "Dienstag", (SELECT "Vorname" FROM "Stammdaten" WHERE "ID" = "a"."ID" AND "a"."Mittwoch" = 1) AS "Mittwoch", (SELECT "Vorname" FROM "Stammdaten" WHERE "ID" = "a"."ID" AND "a"."Donnerstag" = 1) AS "Donnnerstag", (SELECT "Vorname" FROM "Stammdaten" WHERE "ID" = "a"."ID" AND "a"."Freitag" = 1) AS "Freitag" FROM "Essenstage" AS "a"
Mit
Code: Alles auswählen
... (SELECT "Stammdaten"."Vorname" FROM "Stammdaten", "Essenstage" WHERE "Stammdaten"."ID" = "a"."ID" AND "Essenstage"."TagID" = "a"."TagID" AND "a"."Montag" = 1) AS "Montag" ...
Erhältst Du bei Deiner Konstruktion die ganze Geschichte auch für weitere Datensätze.
Oder kann es sein, dass sich die Essenstage nie ändern? So etwas wie auf Dauer vorbestelltes Essen in einer Mensa?
Gruß
Robert
Re: Abfrage bei mehreren Boolean-Feldern
Verfasst: Do, 03.04.2014 18:53
von Yaddayadda
Danke Robert für deinen Vorschlag, auch wenn ich noch nicht ganz durchblicke, wie du das gemeint hast.

Was ist "a" in deinem Beispiel?
Leider können sich die Anmeldungen auch verändern, es ist also nicht dauerhaft gleich.
Vielleicht kann ich ein wenig erklären, worum es geht. Die Datenbank wird in einer Kita verwendet. Dort essen die Kinder auch zu Mittag. Prinzipiell kann man sein Kind für best. Tage fest anmelden, diese Anmeldung kann aber natürlich jederzeit abgeändert werden. Neben dieser Anmeldung müssen für jeden Monat auch die Tage erfasst werden, an denen das Kind tatsächlich in der Kita gegessen hat. Am Monatsanfang werden dann für den Vormonat die Abrechnungen erstellt, da jedes Mittagessen mit 3€ berechnet wird. Es sei denn, das Kind hat eine "Pauschale" gebucht, dann findet keine Berechnung statt, da die Pauschale direkt mit der Kitagebühr erhoben wird. Kann mir noch jemand folgen?

Darüberhinaus brauche ich für jeden Monat eine detaillierte Liste, welches Kind an welchem Tag Mittagessen bekommen hat und wieviele Mittagessen im Monat insgesamt ausgegeben wurden. Dieser gesamte Verwaltungskram ist echt Wahnsinn... *seufz*
Re: Abfrage bei mehreren Boolean-Feldern
Verfasst: Do, 03.04.2014 20:04
von Yaddayadda
So, ich habe ein weiteren Weg gefunden. Dabei bleibt die ursprüngliche Tabelle mit den Boolean-Feldern erhalten. Die einzelnen Abfragen für jeden Wochentag ersetze ich dabei durch folgenden View (hier der Kürze halber nur Montag-Mittwoch):
Code: Alles auswählen
SELECT 'Montag' as "Tag", "Essenstage"."ID" AS "ID", "Essenstage"."Montag" AS "Montag", "Stammdaten"."Vorname" FROM "Essenstage" AS "Essenstage", "Stammdaten" AS "Stammdaten" WHERE "Essenstage"."ID" = "Stammdaten"."ID" AND "Essenstage"."Montag" = 1
UNION
SELECT 'Dienstag' as "Tag", "Essenstage"."ID" AS "ID", "Essenstage"."Dienstag" AS "Dienstag", "Stammdaten"."Vorname" FROM "Essenstage" AS "Essenstage", "Stammdaten" AS "Stammdaten" WHERE "Essenstage"."ID" = "Stammdaten"."ID" AND "Essenstage"."Dienstag" = 1
UNION
SELECT 'Mittwoch' as "Tag", "Essenstage"."ID" AS "ID", "Essenstage"."Mittwoch" AS "Mittwoch", "Stammdaten"."Vorname" FROM "Essenstage" AS "Essenstage", "Stammdaten" AS "Stammdaten" WHERE "Essenstage"."ID" = "Stammdaten"."ID" AND "Essenstage"."Mittwoch" = 1
Auf der Grundlage dieses View erstelle ich meinen Bericht, den ich nun wieder wunderbar nach dem Feld "Tag" gruppieren kann.
Da ich nur 5 Wochentage berücksichtigen muss (Mo-Fr), ist das denke ich für mich die einfachste Lösung. Oder gibt es vielleicht einen Haken, den ich bisher noch nicht gesehen habe?
Gruß,
yaddayadda
Re: Abfrage bei mehreren Boolean-Feldern
Verfasst: Do, 03.04.2014 20:20
von RobertG
Hallo Yaddayadda,
das "a" ist der Alias für die Tabelle "Essenstage". Mit der Unterabfrage möchte ich auf Werte der eigentlichen Abfrage zugreifen, in dem Fall auf die "ID" des momentanen Datensatzes. Die "ID" des momentanen Datensatzes erhalte ich in der Unterabfrage, indem ich mich auf "a"."ID" beziehe.
Du erhältst also in verschiedenen Wochen unterschiedliche Ankreuzungen für die Wochentage. Dann musst Du die Unterabfragen erweitern, damit auch in den Folgewochen wieder die entsprechende Bild abgegeben werden kann.
Die TagID ist eigentlich kein günstiger Primärschlüssel. Ich würde eine Kombination aus dem Fremdschlüssel "Stammdaten"."ID" und Jahr sowie Woche (alternativ auch Datum des Montags in der Woche o.ä.) wählen. Dann kannst Du Deine Abrechnung nach Wochen oder Monaten o.ä. zusammen fassen.
Anmerkung zu Deinem weiteren Schritt: Warum taucht immer noch das Feld "Essenstage"."Montag" usw. auf - das ist doch bei allen sowieso angekreuzt, braucht also nicht sichtbar zu sein
Gruß
Robert