【发布时间】:2016-07-30 03:44:57
【问题描述】:
消息 156,级别 15,状态 1,第 8 行 关键字“CASE”附近的语法不正确
我正在尝试根据列值连接列。
如果案例条件 1 为真,那么我想加入 ON im.ItemNumber = left(tr.itemnumber,len(tr.itemnumber)-4)
如果案例条件2为真,那么
开启 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
【问题讨论】:
-
This 回答可能会有所帮助。您可以在
case中处理匹配条件,但不能切换查询的其他部分,例如表,威利尼利。您仍然可以加入所有内容并尝试在where中解决问题,但有时事情会失控。 -
另请注意,不推荐使用这种条件连接选项,几乎总是可以用其他方法(如联合)替换。 Sql 在基于集合的操作中表现得非常好,任何结构代码都会表现得更差。这种条件逻辑可以被视为 if...else。请查看这篇文章:例如simple-talk.com/sql/performance/…。您可以在 Internet 上找到更多信息。
标签: tsql join conditional case