Msg 156, Ebene 15, Status 1, Zeile 8 falsche Syntax nahe dem Schlüsselwort ‚CASE‘Case-Spalten zu verbinden
Ich versuche Spalten auf dem Spaltenwert zu verbinden basieren.
Wenn Fall conditon 1 wahr ist, dann will ich ON im.ItemNumber = left (tr.itemnumber, len (tr.itemnumber) -4)
wenn Fall Bedingung wahr 2 ist dann
beitretenON tr.ItemNumber = im.LegacyItemNumber
sonst
tr.ItemNumber = im.ItemNumber
SELECT
im.Category as RootCategory,GETDATE() AS LoadDate,tr.*
into transactionreport_stage_testNN
FROM transaction tr
LEFT OUTER JOIN ALLDW_ora.dbo.Location(NOLOCK) loc ON tr.location=loc.location
CASE
when
right(tr.itemnumber,4) = '_old' then
LEFT OUTER JOIN [Inventory](NOLOCK) im
ON im.ItemNumber = left(tr.itemnumber,len(tr.itemnumber)-4)
when
tr.itemnumber <> im.ItemNumber
then
LEFT OUTER JOIN [Inventory](NOLOCK) im
ON tr.ItemNumber = im.LegacyItemNumber
else
LEFT OUTER JOIN [Inventory](NOLOCK) im
ON tr.ItemNumber = im.itemnumber
end
AND im.Location=loc.LocationNo
[Dies] (http://stackoverflow.com/questions/ 10256848/can-i-Use-case-Anweisung-in-einem-Join-Bedingung/10260297 # 10260297) Antwort kann eine Hilfe sein. Sie können die Übereinstimmungsbedingung in einem "Fall" jonglieren, aber andere Teile der Abfrage, z. Tische, Willy Nilly. Sie können immer noch alles beitreten und versuchen, es in einem "wo" zu sortieren, aber da kommt ein Punkt, wo die Dinge außer Kontrolle geraten. – HABO
Bitte beachten Sie auch, dass solche bedingten Joins keine empfohlene Option sind und fast immer durch andere Ansätze wie Union ersetzt werden können. Sql funktioniert sehr gut in Set-based Operationen, jeder strukturelle Code wird schlechter funktionieren. Eine solche konditionale Logik kann als ... sonst gesehen werden. Bitte überprüfen Sie diesen Artikel: https://www.simple-talk.com/sql/performance/how-to-avoid-conditional-joins-in-t-sql/ zum Beispiel. Sie finden mehr im Internet. –