PDA

Vollständige Version anzeigen : Spezialfrage...


Jocz
08.01.2002, 08:44
Hallo Ihr,

ich habe ein spezielles Problem und hoffe, dass mir von Euch jemand einen hilfreichen Tipp geben kann:

Ich habe ein Tabelle mit einem Namen, einen Datum und einem Kennzeichen

-------
Name;Datum;Kennzeichen
-------
Müller;01.02.01;A
Müller;02.02.01;A
Müller;03.02.01;A
Müller;05.03.01;B
Meier;02.04.01;A
Meier;03.04.01;A
Meier;04.04.01;A

Ich muss die Daten so umwandeln, dass Daten, die zusammenhängen (Folgetage) als Zeitraum dargestellt werden:

-------
Name;Datum_von;Datum_bis;Kennzeichen
-------
Müller;01.02.01;03.02.01;A
Müller;05.03.01;05.03.01;B
Meier;02.04.01;04.04.01;A


Kann mir jemand helfen!

Vielen Dank im Voraus,

Jochen

MarioR
08.01.2002, 10:09
Hallo Jochen,

kann man Dein Beispiel so verstehen, dass, wenn das Kennzeichen zu einem Namen wechselt, auch eine neue "Serie" startet?

Oder andersrum gefragt: Kann auch nachfolgendes Beispiel auftreten?

-------
Name;Datum;Kennzeichen
-------
Müller;01.02.01;A
Müller;02.02.01;A
Müller;05.02.01;A
Müller;06.02.01;A

--->

-------
Name;Datum_von;Datum_bis;Kennzeichen
-------
Müller;01.02.01;02.02.01;A
Müller;05.02.01;06.02.01;A

Jocz
08.01.2002, 11:27
Ja, es kann auch das gleiche Kennzeichen bleiben.

Jochen

MarioR
08.01.2002, 11:53
Das hab ich befürchtet (und mir schon mal was überlegt ;) ).

Probier mal die folgende Lösung (die 2. Abfrage kann aber 'ne Weile dauern):

1. Abfrage (qryAbfrage1):
(listet alle DS auf, die entweder keinen Vorgänger oder keinen Nachfolger mehr haben)

SELECT DeineTabelle.Name, DeineTabelle.Datum AS DatumNeu, DeineTabelle.Kennzeichen,
DeineTab_1.Datum AS DatumVon, DeineTab_2.Datum AS DatumBis
FROM (DeineTabelle LEFT JOIN DeineTabelle AS DeineTab_1
ON (DeineTabelle.Kennzeichen = DeineTab_1.Kennzeichen)
AND (DeineTabelle.Datum-1 = DeineTab_1.Datum)
AND (DeineTabelle.Name = DeineTab_1.Name))
LEFT JOIN DeineTabelle AS DeineTab_2
ON (DeineTabelle.Kennzeichen = DeineTab_2.Kennzeichen)
AND (DeineTabelle.Datum+1 = DeineTab_2.Datum)
AND (DeineTabelle.Name = DeineTab_2.Name)
WHERE IsNull(DeineTab_1.Datum) OR IsNull(DeineTab_2.Datum)
ORDER BY DeineTabelle.Name, DeineTabelle.Kennzeichen, DeineTabelle.Datum;


2. Abfrage (qryAbfrage2):
(erstellt Deine Liste)

SELECT DISTINCT qryAbfrage1.Name,
IIf(IsNull([DatumVon]),[DatumNeu],DMax("DatumNeu","qryAbfrage1","[DatumNeu]{{{" & Str(CDbl([DatumNeu])))) AS Datum_von,
IIf(IsNull([DatumBis]),[DatumNeu],DMin("DatumNeu","qryAbfrage1","[DatumNeu]>" & Str(CDbl([DatumNeu])))) AS Datum_bis,
qryAbfrage1.Kennzeichen
FROM qryAbfrage1;


Ich hab leichte Probleme bei der Darstellung :(
Ersetze in der "qryAbfrage2" die {{{ durch ein < und starte die Abfrage.