SELECT 'Hallöchen :)' as BEGRUESSUNG
Ich hab da folgende - stark vereinfachte + verkürzte - verschachtelte Abfrage:
ALTER PROCEDURE dbo.QMTEST_100
@Query varchar(200)
AS
SELECT
TB_QM_FM.ObjektID as ObjektID,
TB_QM_FM.KlassenID as KlassenID,
(SELECT RIGHT('000000' + CONVERT(varchar, ISNULL(TB_KUNDEN.KundenNr, 0)), 6)
+ ' - '
+ CASE ISNULL(TB_KUNDEN.NameIntern, '')
WHEN '' THEN ISNULL(TB_KUNDEN.Name, '')
ELSE ISNULL(TB_KUNDEN.NameIntern, '')
END
+ CASE ISNULL(TB_KUNDEN.Stammort, '')
WHEN '' THEN ''
ELSE ' (' + ISNULL(TB_KUNDEN.Stammort, '') + ')'
END
FROM TB_AUFTRAG
INNER JOIN TB_KUNDEN on TB_KUNDEN.ObjektID = TB_AUFTRAG.ClientID
AND TB_KUNDEN.KlassenID = TB_AUFTRAG.Clientklasse
WHERE TB_AUFTRAG.ObjektID=TB_QM_FM.AuftragID
AND TB_AUFTRAG.KlassenID=TB_QM_FM.AuftragCL) as Kunde
FROM TB_QM_FM
WHERE (SELECT RIGHT('000000' + CONVERT(varchar, ISNULL(TB_KUNDEN.KundenNr, 0)), 6)
+ ' - '
+ CASE ISNULL(TB_KUNDEN.NameIntern, '')
WHEN '' THEN ISNULL(TB_KUNDEN.Name, '')
ELSE ISNULL(TB_KUNDEN.NameIntern, '')
END
+ CASE ISNULL(TB_KUNDEN.Stammort, '')
WHEN '' THEN ''
ELSE ' (' + ISNULL(TB_KUNDEN.Stammort, '') + ')'
END
FROM TB_AUFTRAG
INNER JOIN TB_KUNDEN on TB_KUNDEN.ObjektID = TB_AUFTRAG.ClientID
AND TB_KUNDEN.KlassenID = TB_AUFTRAG.Clientklasse
WHERE TB_AUFTRAG.ObjektID=TB_QM_FM.AuftragID
AND TB_AUFTRAG.KlassenID=TB_QM_FM.AuftragCL) LIKE '%' + LTRIM(RTRIM(@Query)) + '%'
return
Jetzt meine Frage: wie kann ich diese Abfrage so vereinfachen, ohne dass ich die komplette Unterabfrage für die Spalte Kunde noch mal in der WHERE-Klausel angeben muß?? Die Hauptabfrage besteht nämlich noch aus weiteren u.U. noch komplizierteren Unterabfragen (welche dann auch LIKE @Query sein müssen). Somit muß ich immer alles doppelt schreiben. Mit weiteren (inner/outer) Joins in der Hauptabfrage gehts scheinbar nicht, weil sich die verschiedenen Relationen ins Gehege kommen. Ich habs zumindest nicht hinbekommen.
Für jegliche Anregung oder Lösung wär ich dankbar :).
Gruß,
Jan