来源:data camp:
CASE statements allow you to categorize data that you’re interested in – and exclude data you’re not interested in. In order to do this, you can use a CASE statement as a filter in the WHERE statement to remove output you don’t want to see.
SELECT *
FROM table
WHERE
CASE WHEN a > 5 THEN 'Keep'
WHEN a <= 5 THEN 'Exclude' END = 'Keep';
-- Select the season, date, home_goal, and away_goal columns
SELECT
season,
date,
home_goal,
away_goal
FROM matches_italy
WHERE
-- Exclude games not won by Bologna
CASE WHEN hometeam_id = 9857 AND home_goal > away_goal THEN 'Bologna Win'
WHEN awayteam_id = 9857 AND away_goal > home_goal THEN 'Bologna Win'
END IS NOT NULL;
在WHERE statement中使用CASE的注意点:
- you don’t alias the statement in WHERE.
- 最后的 = ‘Keep’ 就是case when then else end 看成,查询出来的一个值,然后判断表达式
例子1:
select * from #temp A
where
(case when LEN(A.startMonth)=1 and A.startMonth!=0 then
cast((CAST(startYear as varchar(4))+'0'+cast(A.startMonth as varchar(1))) as date)
when LEN(A.startMonth)=2 then cast(CAST(startYear as varchar(4))+cast(A.startMonth as varchar(2)) as date) end) <=cast(@condition as date)
CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。
语法:CAST (expression AS data_type)
expression:任何有效的SQServer表达式。
AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。
@condition是自己定义的一个变量
https://www.cnblogs.com/accumulater/p/7233626.html
例子2:
WHERE ACTUALNUMBER!=
(CASE WHEN APPROVAL_DEPT IS NOT NULL THEN APPROVALNUMBER
WHEN APPROVAL_PERSON1 IS NOT NULL AND APPROVAL_DEPT IS NULL THEN ONUMBER
ELSE PLANNUMBER END)