SQL-Server, Version 8-9
Wie kann ich für folgendes Statement in der Where-Klausel auf sendungsnummer zugreifen? Einen Alias bekomme ich nicht hin, da ich immer Fehlermeldungen bekomme (z.B. as bla)
SELECT o.liefernummer, 'sendungsnummer' =
CASE
WHEN d.sendungsnummer IS NOT NULL THEN d.sendungsnummer
ELSE convert(varchar, u.sendungsnummer)
END FROM [order] o
LEFT OUTER JOIN ups u ON o.liefernummer = u.liefernummer
LEFT OUTER JOIN dtc d ON o.liefernummer = d.liefernummer
WHERE sendungsnummer ???
Ich möchte einfach auf das dynamische Feld in der Where-Klausel zugreifen. Das muss doch irgendwie gehen.
Danke schon mal für eure Hilfe.
Das muss doch irgendwie gehen.
Nein 😉
Der Alias ist im WHERE-Teil des Statements nicht bekannt. Nur Abfragen, die wiederum auf diese Abfrage zugreifen, wissen von den neuen Spaltenname. Die eigentliche Abfrage, kennt den neuen Spaltennamen noch nicht.
Du hast jetzt zwei Möglichkeiten:
1)
Du setzt den kompletten CASE Block nochmals in den WHERE Teil:
SELECT o.liefernummer, 'sendungsnummer' =
CASE
WHEN d.sendungsnummer IS NOT NULL THEN d.sendungsnummer
ELSE convert(varchar, u.sendungsnummer)
END FROM [order] o
LEFT OUTER JOIN ups u ON o.liefernummer = u.liefernummer
LEFT OUTER JOIN dtc d ON o.liefernummer = d.liefernummer
WHERE
(CASE
WHEN d.sendungsnummer IS NOT NULL THEN d.sendungsnummer
ELSE convert(varchar, u.sendungsnummer)
END) = 'DieSendungsNummer'
Nachteil: Ändert sich was im CASE, muss es an zwei Stellen nachgezogen werden und ist somit fehleranfälliger
2)
Du setzt das Statement als VIEW ab und selektierst auf das VIEW
CREATE VIEW SendungsNummern
AS
SELECT o.liefernummer, 'sendungsnummer' =
CASE
WHEN d.sendungsnummer IS NOT NULL THEN d.sendungsnummer
ELSE convert(varchar, u.sendungsnummer)
END FROM [order] o
LEFT OUTER JOIN ups u ON o.liefernummer = u.liefernummer
LEFT OUTER JOIN dtc d ON o.liefernummer = d.liefernummer
-- Später
SELECT * FROM SendungsNummern
WHERE sendungsnummer = 'xxx'
Vorteil: Die CASE Bedingung muss nur noch an einer Stelle gepflegt werden. Desweiteren hat man noch die Möglichkeit Indizierte Views zu erstellen.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
@Khalid,
vielen Dank! - dann mache ich eine View - dachte, dass man hier mit einem Alias draufgehen kann.
Gruß
OK, für alle, die es interessiert, es gibt doch eine Lösung, die sieht dann so aus:
aus ....
SELECT o.liefernummer, 'sendungsnummer' =
CASE
WHEN d.sendungsnummer IS NOT NULL THEN d.sendungsnummer
ELSE convert(varchar, u.sendungsnummer)
END FROM [order] o
... wird
SELECT o.liefernummer,
CASE d.sendungsnummer
WHEN IS NOT NULL THEN d.sendungsnummer
ELSE convert(varchar, u.sendungsnummer)
END AS myAliasName
FROM [order] o