SELECT子句中的用例语句

时间:2015-09-22 21:56:07

标签: sql sql-server

我有一张婚姻状况表的表格,其值为'S','D','M'or'U' 查询应查找所有单身人士,并将所有离婚和未知人员视为单身人士。 这是我到目前为止所尝试的

Select *
from marketing_list 
where 
   Marital_Status = 
      Case 
        When Marital_Status = 'D' Then 'S' 
        When Marital_Status = 'U' Then 'S'
      End

4 个答案:

答案 0 :(得分:2)

为什么不使用in

Select * from Marketing_List
where Marital_Status in ('D','S','U')

或者(假设没有NULL值):

Select * from Marketing_List
where Marital_Status <> 'M'

如果必须使用case语句(如注释),则语法应为:

Select * from Marketing_List
where case when Marital_Status in ('S','D','U') then 'S' else 'M' end = 'S'

Select * from Marketing_List
where case when Marital_Status = 'D' then 'S' 
           when Marital_Status = 'U' then 'S' 
      Else Marital_Status end = 'S'

答案 1 :(得分:1)

如果您的代码定义相同,则只需过滤CASE语句即可。请改用WHERE子句中的IN语句。

SELECT * 
FROM marketing_list 
WHERE Marital_Status IN ('D','S','U')

答案 2 :(得分:1)

如果您将M更改为NULL

,则很简单
Select *
from marketing_list 
where 
   Marital_Status = 
      Case 
        When Marital_Status = 'M' Then NULL
        ELSE Marital_Status           
      End

答案 3 :(得分:1)

在其中一条评论中,您说:

  

这是一项作业,我的导师希望我们在 选择 子句中使用案例陈述

听起来,您真正想要的是选择所有行,同时使用CASE语句转换结果中的婚姻状况。这更有意义,否则,使用IN子句更合适。

以下是您想要的查询:

select m.*,
       case when m.marital_status IN ('D', 'U')
            then 'S'
            else m.marital_status
       end as concise_marital_status
  from marketing_list m