Abfrage bei mehreren Boolean-Feldern
Moderator: Moderatoren
-
- **
- Beiträge: 34
- Registriert: Mi, 20.06.2012 14:13
Abfrage bei mehreren Boolean-Feldern
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
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
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
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
-
- **
- Beiträge: 34
- Registriert: Mi, 20.06.2012 14:13
Re: Abfrage bei mehreren Boolean-Feldern
Die Abfrage habe ich so gestaltet:
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...
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
Wie sollte ich da noch was gruppieren?
Gruß,
yaddayadda
P.S.: Ich schau mal, ob ich ne Beispieldatenbank hinbekomme...
- Dateianhänge
-
- Beispiel_Tage.odb
- (10.32 KiB) 72-mal heruntergeladen
Re: Abfrage bei mehreren Boolean-Feldern
Hi,
ich empfehle dir, die Tage nicht nebeneinander, sondern untereinander zu schreiben, siehe Anlage.
Gruß R
ich empfehle dir, die Tage nicht nebeneinander, sondern untereinander zu schreiben, siehe Anlage.
Gruß R
- Dateianhänge
-
- Beispiel_Tage.odb
- (41.67 KiB) 78-mal heruntergeladen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
-
- **
- Beiträge: 34
- Registriert: Mi, 20.06.2012 14:13
Re: Abfrage bei mehreren Boolean-Feldern
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
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:
Mit
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
ä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"
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" ...
Oder kann es sein, dass sich die Essenstage nie ändern? So etwas wie auf Dauer vorbestelltes Essen in einer Mensa?
Gruß
Robert
-
- **
- Beiträge: 34
- Registriert: Mi, 20.06.2012 14:13
Re: Abfrage bei mehreren Boolean-Feldern
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*

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?

-
- **
- Beiträge: 34
- Registriert: Mi, 20.06.2012 14:13
Re: Abfrage bei mehreren Boolean-Feldern
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):
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
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

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
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
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