SQL中CASE WHEN THEN的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中CASE WHEN THEN的用法相关的知识,希望对你有一定的参考价值。

table表中2个字段age name20 aa30 bb35 cc40 dd50 ee70 ff使用SQL语句查询得到结果如下:年龄段 数目青年 1中年 3老年 2注:年龄小于30为青年,31到49为中年,50以上为老年。请问SQL语句怎么写?

select a,count(*) from
(select a=case when age<30 then '青年' --查询age <30的为青年,“青年”直接赋给a
when age>=30 and age<50 then '中年'
when age>=50 then '老年' end
from test --括号里查出每条记录中对应年龄段属于哪个值 )
a_test --将查出的值 放到 a_test中去
group by a --按a_test 中的字段 a 分组统计数据
参考技术A 给你一个参考。我相信你看了后就知道应该如何处理了。有表student(id,name,score)根据分数列(score)每10分为一段,查询每段分数的人数。
SELECT a, COUNT(*)
FROM (SELECT a = CASE WHEN score >= 0 AND
score < 10 THEN '0-9' WHEN score >= 10 AND
score < 20 THEN '10-19' WHEN score >= 20 AND
score < 30 THEN '20-29' WHEN score >= 30 AND
score < 40 THEN '30-39' WHEN score >= 40 AND
score < 50 THEN '40-49' WHEN score >= 50 AND
score < 60 THEN '50-59' WHEN score >= 60 AND
score < 70 THEN '60-69' WHEN score >= 70 AND
score < 80 THEN '70-79' WHEN score >= 80 AND
score < 90 THEN '80-89' WHEN score >= 90 AND
score < 100 THEN '90-99' ELSE '100' END
FROM student) a
GROUP BY a
参考技术B select 年龄段,count(num) as nums from
(select '年龄段'=(case when age<30 then '青年' when age>=30 and age<50 then '中年' else '老年' end),count(*) as num from tage group by age) as a
group by 年龄段
你把你的sql语句这样改试试
参考技术C select
a,count(*)
from
(
select
a=case
when
age<30
then
'青年'
--查询age
<30的为青年,“青年”直接赋给a
when
age>=30
and
age<50
then
'中年'
when
age>=50
then
'老年'
end
from
test
--括号里查出每条记录中对应年龄段属于哪个值
)
a_test
--将查出的值
放到
a_test中去
group
by
a
--按a_test
中的字段
a
分组统计数据
参考技术D select case when age<30 then N'青年' when age between 30 and 49 then N'中年' else N'老年' end  as [年龄段],count(name) as [数目] from table
group by case when age<30 then N'青年' when age between 30 and 49 then N'中年' else N'老年' end

sql 中 case when 语法

sql 存储过程中 case when then 之后可以加 sql语句么,可以有详细的例子么
下面的存储过程正确么
主要看后面的case when then

参考技术A 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部分将会被自动忽略。

--比如说,下面这段sql,你永远无法得到“第二类”这个结果
case when col_1 in ( 'a', 'b') then '第一类'
when col_1 in ('a') then '第二类'
else'其他' end追问

我主要想问case when then 之后可以加sql语句么

参考技术B case when then as 某个字段,后面可以加sql语句的 参考技术C select case when f1=1 then 'f1 is 1' else 'f1 not is 1' end as f2 from t1追问

我主要想问case when then 之后可以加sql语句么

追答

原则上可以加,但只能加能直接返回一个数据的sql语句或函数,注意是一个数据,不能是多个,也不能加没有结果的过程。
换句话说,case when只是一个返回结果的功能语句,不是条件分支语句,不能指示程序的走向

本回答被提问者采纳

以上是关于SQL中CASE WHEN THEN的用法的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句中case,when,then的用法

SQL中CASE WHEN THEN的用法

sql 中 case when 语法

SQL之case when then用法

case when用法sql

SQL之case when then用法