我有一张婚姻状况表的表格,其值为'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
答案 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