SQL Case when 的使用方法
Case具有两种格式:简单Case函数和Case搜索函数。
- 简单Case函数#####
CASE sex WHEN '1' THEN '男'
WHEN '2' THEN '女' ELSE '其他' END
- Case搜索函数#####
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略
用法1:case when 应用于数据展示
select
when [列] like '%maomao%' then 'maomao'
when [列] like '%xiao%' then 'xiaoxiao'
else 'other'
)as 'then用法'
from [maomao365.com]
当第一个when满足后,则展示出 maomao ,其它when 和else 则不执行
如果所有的when条件都得不到满足,则输出else 的结果
用法2:case when 应用于数据统计
select
sum (
when [列] like '%maomao%' then 1
else 0
)as 'sum1',
sum (
when [列] like '%xiaoxiao%' then 1
else 0
)as 'sum2'
from [maomao365.com]
用法3:case when where数据检索
select
from [maomao365.com]
where
when [列] like '%maomao%' then 1
when [列] like '%xiao%' then 1
else 0
) =1
以上sql脚本会展示出 列值包含maomao 或 列值包含xiao的数据行
请写出sql语句:
select PersonID,sum(case when Thirdscore=100 then 1 else 0 end) as times, count(PersonID)
from Persons
group by PersonID
order by PersonID desc
CREATE TABLE TB_Test_Report
id int identity,
stateid int,
userid int,
username varchar(64)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (20,1,'a')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,2,'b')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (20,2,'b')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,'a')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,'a')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,3,'c')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,3,'c')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (20,1,'c')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,'a')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,'A')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (30,1,'a')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (30,1,'b')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (30,1,'c')
已知语句 select * from TB_Test_Report where stateid in (10,20)
要求在语句后面增加条件(加入 and 或者 or 或者 表达式)
查询出,所有stateid =10 和 (stateid=20 并且userid = 2) 的记录
SELECT *
FROM TB_Test_Report