我想选择如果@reporteetype
为'immediate'
,那么我希望选择等级等于 1的行,否则等级更高比 2。
select a, b, c, level
from table1
where col1 ='x' and
CASE @reporteetype WHEN 'immediate' THEN level = '2'
WHEN 'other' THEN level > 2
else 1 = 1
END
这是我的方案的简化版本。我不想使用动态查询。我想知道是否可以使用案例来完成?
答案 0 :(得分:7)
您可以使用AND
和OR
条件的组合来执行此操作:
SELECT
a, b, c, level
FROM table1
WHERE
col1 = 'x'
AND (
(@reporteetype = 'immediate' AND level = 2)
OR (@reporteetype = 'other' AND level > 2)
)
补充阅读:
答案 1 :(得分:1)
@Felix提出的答案Pamittan效率更高,但是如果你想使用CASE Expression,那么它会有所帮助:
SELECT a
, b
, c
, level
FROM table1
WHERE col1 = 'x'
AND ( ( CASE WHEN @reporteetype = 'immediate' THEN '2'
END ) = level
OR ( CASE WHEN @reporteetype = 'other' THEN '2'
END ) > level
)