Abfrage bei mehreren Boolean-Feldern

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Abfrage bei mehreren Boolean-Feldern

Re: Abfrage bei mehreren Boolean-Feldern

von RobertG » Do, 03.04.2014 20:20

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

Re: Abfrage bei mehreren Boolean-Feldern

von Yaddayadda » Do, 03.04.2014 20:04

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. :-D

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

von Yaddayadda » Do, 03.04.2014 18:53

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

von RobertG » Do, 03.04.2014 17:50

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

von Yaddayadda » Do, 03.04.2014 08:24

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

von F3K Total » Mi, 02.04.2014 21:42

Hi,
ich empfehle dir, die Tage nicht nebeneinander, sondern untereinander zu schreiben, siehe Anlage.
Gruß R
Dateianhänge
Beispiel_Tage.odb
(41.67 KiB) 79-mal heruntergeladen

Re: Abfrage bei mehreren Boolean-Feldern

von Yaddayadda » Mi, 02.04.2014 20:01

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...
Dateianhänge
Beispiel_Tage.odb
(10.32 KiB) 73-mal heruntergeladen

Re: Abfrage bei mehreren Boolean-Feldern

von RobertG » Mi, 02.04.2014 19:33

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

Abfrage bei mehreren Boolean-Feldern

von Yaddayadda » Mi, 02.04.2014 13:11

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

Nach oben