SQL:大于或等于基于案例条件的where子句?

时间:2016-04-28 06:50:28

标签: sql sql-server sql-server-2008 tsql

我想选择如果@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 

这是我的方案的简化版本。我不想使用动态查询。我想知道是否可以使用案例来完成?

2 个答案:

答案 0 :(得分:7)

您可以使用ANDOR条件的组合来执行此操作:

SELECT
    a, b, c, level
FROM table1
WHERE
    col1 = 'x'
    AND (
        (@reporteetype = 'immediate' AND level = 2)
        OR (@reporteetype = 'other' AND level > 2)
    )

补充阅读:

Catch-all Queries by Gail Shaw

答案 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
            )