在WHERE条件下使用CASE的MSSQL Select

时间:2018-12-11 11:31:30

标签: sql sql-server tsql case where

在某些情况下,我必须选择:

  1. 所有记录
  2. 取消的记录
  3. 打开=所有未取消的记录

我正在尝试类似的事情:

SELECT * FROM Status WHERE Description =
    CASE
        WHEN @Status  = 'Cancelled' THEN 'Cancelled'
        WHEN @Status  = 'Open' THEN **NOT Cancelled**
        ELSE Description
    END

如何写“不取消”条件?

谢谢。

1 个答案:

答案 0 :(得分:4)

为什么不这样:

library(tidyverse)
library(lubridate)
df %>%
    unite(dmy, day, month, year) %>%
    transmute(dmy = dmy(dmy))
#         dmy
#1 1999-02-02
#2 2000-01-04
#3 2001-06-22
#4 1977-12-07
#5 1982-10-17
#6 1940-05-12

请注意,如果WHERE (@Status = 'Cancelled' AND Description = 'Cancelled') OR (@Status = 'Open' AND Description <> 'Cancelled') OR @Status NOT IN ('Open', 'Cancelled') OR @Status IS NULL 可以为Description,则您需要添加其他逻辑来处理这些记录,因为NULLNULL = 'string'为假。

如Zohar Peled所指出的那样,可以进一步简化:

NULL <> 'sting'