PDA

Vollständige Version anzeigen : Datensätze im Bericht auffüllen bzw. ergänzen


MedoBot
18.10.2011, 23:08
Hallo alle zusammen,

ich habe folgendes Problem :

in einem Bericht soll für einen Mitarbeiter immer ein vollständiger Monat aufgelistet sein - bspw. vom 01.10.11 bis zum 31.10.11.
Der Mitarbeiter ist jedoch nur an 12 Tagen im Monat anwesend. Die 12 Tage sind in der Tabelle 'tblPlaung' erfasst.

In der Abfrage, welche nur die 12 tatsächlich vorhandenen Einträge ausgibt - diese funktioniert ohne Probleme - stehen als Kriterien:
Monat und Jahr, diese werden durch die Funktion fctSendVar() ermittelt und die Nummer des Mitarbeites. Die Nummer ist Teil eines Strings, der sich
aus mehren Daten zusammensetzt. Mittels des Feldes [txtQryGlobal] und der Funktion InStr wird die zu druckende Mitarbeiternummer ermittelt.

Der SQL-Code sieht wie folgt aus :

SELECT tblPlanung.*, tblPlanung.MoDatum, tblPlanung.JaDatum, fctSendVar4() AS PersIDNr, InStr([McStrPn],Forms!frmPlanTab!txtQryGlobal) AS Ausdr1
FROM tblPlanung
WHERE (((tblPlanung.MoDatum)=fctSendVar1()) AND ((tblPlanung.JaDatum)=fctSendVar2()) AND ((InStr([McStrPn],[Forms]![frmPlanTab]![txtQryGlobal]))>0))
ORDER BY tblPlanung.WorkDay;

Zusttzlich habe ich eine Tabelle, in der alle Daten vom 01.01.2011 bis zum 31.12.2099 stehen. Diese Tabelle besteht aus 3 Feldern : AllDat, MoDatum und JaDatum.

Nun zum eigentlichen Problem :

Ich benötige eine Abfrage für einen Bericht, der mir für die gewählten Kriterien Nummer, Monat und Jahr einen kompletten Monat vom ersten bis zum letzten
Tag ausgibt.

Bisher habe ich mit der Anweisung LEFT JOIN herum expirimentiert. Mein Ansatzpunkt war, die Felder WORKDAY aus der Tabelle tblPlaung und ALLDAT
aus Tabelle tblAllDaten zu verbinden. Leider ohne jeden Erfolg.

Ich hoffe jemand hat eine Lösung oder guten Hinweis für mich.
Vielen Dank im voraus

ebs17
19.10.2011, 01:39
- Der Ansatz mit der Hilfstabelle ist schon einmal gut (alle Felder dort indizieren!).
- In einer Stammdatentabelle (tblPlanung) sind Felder MoDatum und JaDatum als Ableitungen vom Datum überflüssig und sogar schädlich. Diese kannst Du bei Bedarf, z.B. wenn Du danach filtern oder gruppieren willst, Deiner Hilfstabelle entnehmen, wo sie ja auch schon enthalten sind.
Die Hilfstabelle selber darf herrlich unnormalisiert sein.
Als Ansatz für die Tage eines Mitarbeiters:
SELECT A.Alldat ,
A.MoDatum,
A.JaDatum,
P.MA_ID
FROM (SELECT H.*
FROM ALLDAT AS H
WHERE H.Alldat >= Format(DateSerial([ParamJahr], [ParamMonat], 1), "\#yyyy\-mm\-dd\#")
AND H.Alldat < Format(DateSerial([ParamJahr], [ParamMonat] + 1, 1), "\#yyyy\-mm\-dd\#") AS A
LEFT JOIN
(SELECT T.MA_ID
FROM tblPlanung AS T
WHERE T.MA_ID = [ParamMA]
)
AS P
)
ON A.AllDat = P.Datum

MedoBot
29.10.2011, 13:43
Hey,

nach vielen Versuchen und zahlreichen Rückschlägen und diversen Kämpfen mit der Syntax funktioniert das ganze jetzt einwandfrei.

ebs17 - vielen Dank für deine Hilfe.