我想要做的是基于where子句条件之间的条件切换..这可能吗?
这是一个例子,实际程序要长得多,我不想在选择时使用if。
有可能吗?
declare @city varchar(100) = 'NY'
SELECT s.suppliers, o.order
FROM suppliers s
INNER JOIN orders o ON s.id = o.id
WHERE
CASE WHEN @city = 'NY'
THEN (s.SupplierName = o.SupplierName AND o.Row = 'New')
ELSE s.SupplierName = o.SupplierName
END
答案 0 :(得分:2)
我之前做过类似的事情:
WHERE s.SupplierName = o.SupplierName
AND
CASE WHEN @city = 'NY' AND o.Row = 'New' THEN 1
WHEN @city <> 'NY' THEN 1
ELSE 0 END = 1
你可以随心所欲地复杂化,但要注意你做了什么来保持合理的表现。
答案 1 :(得分:1)
你不需要case
,你可以将常见条件放在ON
条款中:
SELECT s.suppliers, o.order
FROM suppliers s INNER JOIN
orders o
ON s.id = o.id AND s.SupplierName = o.SupplierName
WHERE (@city = 'NY' AND o.Row = 'New') OR
(@city <> 'NY');
这假定@city
不是NULL
。包含这种可能性的逻辑稍微复杂一些(虽然看起来没必要)。