将case语句转换为where子句中的逻辑运算符

时间:2015-08-27 12:55:05

标签: sql

请帮助我将这段代码转换为逻辑运算符并使用'like'而不是'='因为我知道将case语句放在where子句上效率不高。蒂亚!这是代码。

Where
(@reftype = '0' or
  (@refnum = case @reftype when 'BN' then refBN when 'C' then refC when 'O' then refO else 'n/a' end)
)

2 个答案:

答案 0 :(得分:0)

替换

or @refnum = case @reftype when 'BN' then refBN when 'C' then refC when 'O' then refO else 'n/a' end)

or (@reftype = 'BN' AND @refnum = refBN) 
or (@reftype = 'C' AND @refnum = refC) 
or (@reftype = 'O' AND @refnum = refO) 
or @refnum = 'n/a'

答案 1 :(得分:0)

您可以通过以下方式将其转换为布尔逻辑:

WHERE  @reftype = '0 'OR @refnum = 'n/a' 
OR (@reftype = 'BN' AND @refnum = refbn)
OR (@reftype = 'C'  AND @refnum = refc)
OR (@reftype = 'O'  AND @refnum = refo)

但请注意CASE - 子句中的WHERE本身并不低效。

相关问题