有没有办法在case-when语句中使用条件?

时间:2017-07-10 14:40:35

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

我的查询(不会运行):

SELECT * FROM TABLE A
WHERE (case when mode = 1 then Tonnage > 1000
          when mode = 2 then Tonnage > 5000
          else Tonnage < -1
)

我要做的是根据另一列(模式)选择不同的过滤器标准(吨位)。

但是,由于>

,这不起作用

有没有办法解决它?

2 个答案:

答案 0 :(得分:2)

您不需要case

where (mode = 1 and Tonnage > 1000) or
      (mode = 2 and Tonnage > 5000) or
      ( (mode not in (1, 2) or mode is null) and Tonnage < -1)

答案 1 :(得分:0)

您也可以使用案例陈述,对两者之间的绩效结果充满好奇。

SELECT * 
FROM TABLE A
WHERE (case when mode = 1 and Tonnage > 1000 then 1
          when mode = 2 and Tonnage > 5000 then 1
          when tonnage < -1 then 1
          else 0 end
    ) = 1