Hallo Zusammen,
ich befürchte ich stehe auf dem Schlauch und brächte mal Hilfe. Ich hoffe ich kann im folgenden mein - für mich komplexes - Problem richtig beschreiben.
ich habe eine Table-valued Function die mir Daten aus unterschiedlichen Tabellen liefert. Je nach Abfrage können das einige Tausend Datensätze sein.
Es gibt folgende Tabellen:
Tabelle1: beinhaltet Rechnungsdaten
Aufbau: VorgangNr, StandortNr; usw.
Tabelle2: Zeigt an wer Rechnungen welches Standortes errhalten soll und steht in 1:N Beziehung zu Tabelle1
Aufbau: VersandID;StandortNr;MitarbeiterNr, usw.
Das Problem ist nun
Tabelle3: Zeigt an, welche Rechnung bereits an wen versendet wurde. DIe Tabelle steht in 1:N Beziehung zu Tabelle1 und auch in 1:N Beziehung zu Tabelle2
LogID;VorgangNr,MitarbeiterNr, Versanddatum
Ich möchte gerne wissen, ob eine Rechnung aus Tabelle1 bereits an den Zuständigen Bearbeiter aus Tabelle 2 versendet wurde und wenn ja wann zuletzt. (Es kann durchaus sein, dass der Mitarbeiter die Rechnung bereits mehrfach erhalten hat.)
Zunächst habe ich versucht, das innerhalb der Abfrage durch eine Unterabfrage zu lösen:
SELECT TOP 100 PERCENT R.VorgangNr, E_S.MitarbeiterNr, R.StandortNr, L.LetzerLog
FROM AbfrageAufTabelle2 E_S LEFT OUTER JOIN
(SELECT VorgangNr, MitarbeiterNr, MAX(Versanddatum) AS LetzerLog
FROM dbo.Tabelle3
GROUP BY VorgangNr, MitarbeiterNr) L ON E_S.MitarbeiterNr = L.MitarbeiterNr RIGHT
OUTER JOIN
AbfrageAufTabelle1 R ON L.VorgangNr = R.VorgangNr AND E_S.StandortNr = R.StandortNr
Dies liefert dann aber nur die Werte, die bereits einen Log haben. Die anderen Werte werden mir nicht angezeigt.
Dann habe ich versucht, das ganze durch eine Scalar_Valued-Function zu lösen die ich als weiteres Feld in die Table-valued Function einbaue. Das führte auch zum Erfolg, ist nur super langsam. Bei 100 Datensätzen geht es gerade noch. Danach wird die Abfrage
einfach zu langsam.
Kann mich jemand mal auf die richtige Lösung schupsen?
Vielen Dank und viele Grüße
Patrick