Leute, ich bin Euch so dankbar, dass Ihr mir helfen wollt!
Ich muss mir selber erst mal klar werden, was ich brauche: Roberts Weg scheint mir klar zu sein - allerdings muss ich mit while - wend einige tausend Datensätze durchsuchen, ob in 9 Feldern die Zahl ' 19' vorkommt (analog in anderen Jahren andere Zahlen) und das dauert ziemlich "lange". (Aus Vereinfachungsgründen hatte ich das erst mal nur mit zwei Maßnahmen probiert) Und dabei steht die Zahl nicht direkt als Text in den neun Feldern, sondern ist jeweils über eine ID (aus den neun Feldern) aus einer anderen Tabelle "MN" im Feld "KBez" zu ermitteln.
Um das Problem zu lösen, muss erst mal das DB-Gesamtkonstrukt bekannt sein:
Die Berater aus "RB" (ansprechbar über deren ID oder die Hilfstabelle "idueb"."uebid") entsenden Teilnehmer aus "TN" in Maßnahmen "MN", die in ihren Kurzbezeichnungen "KBez" die Jahreszahl tragen. Das Doofe ist nun, dass im Datensatz des TN maximal 9 MN (M1ID,M2ID,...,M9ID) über die MN-ID verankert sein können (mit anderen Worten: Ein TN kann max. an 9 MN - verknüpft über deren ID - teilnehmen). Die Aufgabe lautet nun: Ermittle, wie viele TN ein Berater (RB) im Jahr 19 entsendet hat.
select count sollte bei dem Durchlauf der Tabelle "TN" bei 9 Feldern über den ID-Bezug auf "MN"."KBez" ermitteln, ob "% 19%" drin vorkommt und wenn ja, den Zähler erhöhen. Dabei dürfen aus der Tabelle "TN" nur die berücksichtigt werden, bei denen die "TN"."RBID" der "idueb"."uebid" entspricht.
(Ich hoffe, Ihr könnt mir noch folgen?)
Wie schon beschrieben, funktioniert eine Abfrage super:
SELECT "TN"."ID" "ID", "TN"."MDID" "MDID", "TN"."M1ID" || '-' || ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M1ID" ) "M1", "TN"."M2ID" || '-' || ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M2ID" ) "M2", "TN"."M3ID" || '-' || ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M3ID" ) "M3", "TN"."M4ID" || '-' || ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M4ID" ) "M4", "TN"."M5ID" || '-' || ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M5ID" ) "M5", "TN"."M6ID" || '-' || ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M6ID" ) "M6", "TN"."M7ID" || '-' || ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M7ID" ) "M7", "TN"."M8ID" || '-' || ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M8ID" ) "M8", "TN"."M9ID" || '-' || ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M9ID" ) "M9", ( SELECT "RB"."Name" FROM "RB" WHERE "RB"."ID" = "idueb"."uebid" ) "RBID", ( SELECT "KT"."Bez1" FROM "KT" WHERE "TN"."KTID" = "KT"."ID" ) "KTID", "TN"."geb" "geb", "TN"."Vorn" "Vorn", "TN"."Name" "Name", "TN"."VnM" "VnM", "TN"."AStat" "AStat", "TN"."Bem" "Bem", "TN"."VNr" "VNr", ( SELECT "BZ"."KBez" FROM "BZ" WHERE "TN"."BZID" = "BZ"."ID" ) "BZID", "TN"."aktiv" FROM "TN", "idueb", "MN", "RB" WHERE "TN"."RBID" = "idueb"."uebid" AND "TN"."M1ID" = "MN"."ID" AND "RB"."ID" = "idueb"."uebid" AND ( ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M1ID" ) LIKE '% 19%' OR ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M2ID" ) LIKE '% 19%' OR ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M3ID" ) LIKE '% 19%' OR ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M4ID" ) LIKE '% 19%' OR ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M5ID" ) LIKE '% 19%' OR ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M6ID" ) LIKE '% 19%' OR ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M7ID" ) LIKE '% 19%' OR ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M8ID" ) LIKE '% 19%' OR ( SELECT "MN"."KBez" FROM "MN" WHERE "MN"."ID" = "TN"."M9ID" ) LIKE '% 19%' ) ORDER BY "MDID" DESC
(ungekürzt)
Ich wollte diese Abfrage im Makro verwenden, um den ermittelten Wert dann in ein Datenfeld des RB eintragen zu können - das Makro hätte ich im Formular an den Datensatzwechsel gebunden, so dass bei jedem Wechsel der Wert im Formular aktualisiert wird.
Bisher zeige ich den Bericht, basierend auf der o.a. Abfrage, an und trage händisch die ermittelte Anzahl in das entsprechende Feld des RB ein, was natürlich blöd ist.
Das ist der Stand der Dinge....
Danke für Eure Vorschläge.
Peter