![]() |
Datenbank: Jet • Version: 4.0 • Zugriff über: ADO
Joins auf letzten existierenden Datensatz
Hi,
ich stehe gerade vor einem Problem, bei dem ich mir nicht ganz sicher bin, ob es dafür überhaupt eine Lösung gibt. Ich habe (vereinfacht ausgedrückt) 2 Tabellen. 1. "Mahndefinitionen" Feld 1: MahnNr (Numerisch) Feld 2: Mahnabstand (Numerisch) Feld 3: Mahntitel (String) 2. "OPs" Feld 1: Belegnr (String) Feld 2: Mahnstufe (Numerisch) Feld 3: Faellig (Datum) Jetzt möchte ich mittels einer SQL-Abfrage die fälligen OP bekommen. Mein SQL-Query sieht momentan so aus:
Code:
Jetzt bekomme ich alle fälligen OPs. Auch die, für die noch keine Mahndefinition hinterlegt ist, weil die Mahnstufe bereits mehrmals erhöht wurde (Wird bei jeder Mahnung automatisch erhöht)
SELECT *
FROM OPs LEFT JOIN Mahndefinitionen ON (OPs.Mahnstufe+1 = Mahndefinitionen.MahnNr) WHERE (Faellig+Mahnabstand<=Date()) Was ich jetzt möchte: Dass alle OPs, die noch keine entsprechende Mahndefinition haben, automatisch die letzte eingetragene Mahndefinition bekommen. Ist sowas möglich? |
AW: Joins auf letzten existierenden Datensatz
Zitat:
Code:
WHERE Mahnstufe is Null
Zitat:
|
AW: Joins auf letzten existierenden Datensatz
Oh, habe etwas im SQL-Code vergessen. Der sieht eigentlich so aus:
Code:
Also ja, bei den OPs, die als Mahnabstand NULL haben, soll die letzte Mahndefinition genommen werden. Also die, mit der höchsten Mahnnr.
SELECT *
FROM OPs LEFT JOIN Mahndefinitionen ON (OPs.Mahnstufe+1 = Mahndefinitionen.MahnNr) WHERE (OPs.Faellig+Mahndefinitionen.Mahnabstand<=Date() OR Mahndefinitionen.Mahnabstand is null); |
AW: Joins auf letzten existierenden Datensatz
Keine Ahnung ob das bei dir (bzw. JET) geht , aber probier es doch mal mit CASE.
|
AW: Joins auf letzten existierenden Datensatz
Also Case gibt es nicht, dafür allerdings iif...
Meinst du damit, dass ich jedes Feld aus den Mahndefinitionen separat behandeln sollte? also quasi
Code:
?
IIF(mahnabstand is null,(SELECT TOP 1 mahnabstand FROM mahndefinitionen ORDER BY mahnnr DESC),mahnabstand)
Das hat bei mir nicht ganz geklappt... Da bekomme ich folgende Fehlermeldung
Code:
Vielleicht sollte ich dazu sagen, dass das oben eine vereinfachte Darstellung war und ich eigentlich noch viel mehr Felder habe.
Ungültiges Memo- oder OLE-Objekt in Unterabfrage ('mahnschlusstext').
Bei Mahntitel usw. funktioniert das mit IIF, nur mit einem Memo-Feld nicht. Gibt es sonst irgendwelche Möglichkeiten? |
AW: Joins auf letzten existierenden Datensatz
Vielleicht kannst Du die unterabfrage als JOIN definieren und dann im IIF nur noch darauf referenzieren.
|
AW: Joins auf letzten existierenden Datensatz
Ich würde es mit einer Derived Table versuchen. Ich weiss aber nict of Access das kann
|
AW: Joins auf letzten existierenden Datensatz
Zitat:
Code:
heißen.
and Mahndefinitionen.Mahnabstand is not null
Die höchste Mahnnr. könnte man vllt. mit Max(Mahnnr.) erschlagen. Gruß K-H |
AW: Joins auf letzten existierenden Datensatz
Doch, sie interessieren mich schon.
Ich möchte nur, dass alle Datensätze mit nicht gefüllten Mahndefinitionen automatisch die höchste Mahndefinition haben. Mir kam gerade die Idee, einmal alle Datensätze abzufragen, die auch einen Mahnabstand haben (so wie in deinem Beispiel) und anschließend alle anderen abfragen und mit dem höchsten Mahnabstand verknüpfen. Dann beide per UNION in eine Abfrage bauen... ich probiers mal aus. |
AW: Joins auf letzten existierenden Datensatz
Vielleicht so...
SQL-Code:
SELECT *
FROM ops o LEFT JOIN mahndefinitionen m ON NZ(o.Mahnstufe+1, 1) = m.MahnNr AND o.Faellig + NZ(m.Mahnabstand, 0) <= Date() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz