Msg 156, Level 15, состояние 1, строка 8 Неправильный синтаксис около ключевого слова «ДЕЛУ»Case Состояние присоединиться колонки
Я пытаюсь объединить столбцы на основе значения столбца.
Если дело Conditon 1 верно, то я хочу присоединиться к ON im.ItemNumber = левый (tr.itemnumber, длина (tr.itemnumber) -4)
если условие случая 2 истинно, то
ON tr.ItemNumber = im.LegacyItemNumber
еще
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
[Это] (http://stackoverflow.com/questions/ 10256848/can-i-use-case-statement-in-a-join-condition/10260297 # 10260297) Ответ может быть полезен. Вы можете манипулировать условием соответствия в 'case', но не можете переключать другие части запроса, например. таблицы, волей-неволей. Вы все еще можете присоединиться ко всему и попытаться разобраться в «где», но наступает момент, когда вещи выходят из-под контроля. – HABO
Также обратите внимание, что такие условные объединения не рекомендуются и почти всегда могут быть заменены каким-либо другим подходом, например объединением. Sql отлично работает в операциях на основе набора, любой структурный код будет работать хуже. Такая условная логика может рассматриваться как ... else. Пожалуйста, проверьте эту статью: https://www.simple-talk.com/sql/performance/how-to-avoid-conditional-joins-in-t-sql/, например. Вы найдете больше в Интернете. –