2019-02-12 08:21:20 | 作者: 海逸 | 标签: 函数,条件,运用 | 浏览: 4870
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
例如:
SELECT id, name, cj, (CASE WHEN cj 60 THEN 不及格 WHEN cj BETWEEN 60 AND 90 THEN 杰出 WHEN cj 90 THEN 优异 END) AS 状况
FROM stud
这两种方法,能够完结相同的功用。简略Case函数的写法相对比较简练,可是和Case查找函数比较,功用方面会有些约束,比方写判别式。
还有一个需求留意的问题,Case函数只回来第一个契合条件的值,剩余的Case部分将会被主动疏忽。
比方说,下面这段SQL,你永久无法得到“第二类”这个成果
CASE WHEN col_1 IN ( a, b) THEN 第一类
WHEN col_1 IN (a) THEN 第二类
ELSE其他 END
下面咱们来看一下,运用Case函数都能做些什么事情。
一,已知数据依照别的一种方法进行分组,剖析。
有如下数据:(为了看得更清楚,我并没有运用国家代码,而是直接用国家名作为Primary Key)
国家(country) 人口(population)
我国 600
美国 100
加拿大 100
英国 200
法国 300
日本 250
德国 200
墨西哥 50
印度 250
依据这个国家人口数据,计算亚洲和北美洲的人口数量。应该得到下面这个成果。
洲 人口
亚洲 1100
北美洲 250
其他 700
想要处理这个问题,你会怎么做?生成一个带有洲Code的View,是一个处理方法,可是这样很难动态的改动计算的方法。
假如运用Case函数,SQL代码如下:
SELECT SUM(population),
CASE country
WHEN 我国 THEN 亚洲
WHEN 印度 THEN 亚洲
WHEN 日本 THEN 亚洲
WHEN 美国 THEN 北美洲
WHEN 加拿大 THEN 北美洲
WHEN 墨西哥 THEN 北美洲
ELSE 其他 END
FROM Table_A
GROUP BY CASE country
WHEN 我国 THEN 亚洲
WHEN 印度 THEN 亚洲
WHEN 日本 THEN 亚洲
WHEN 美国 THEN 北美洲
WHEN 加拿大 THEN 北美洲
WHEN 墨西哥 THEN 北美洲
ELSE 其他 END;
相同的,咱们也能够用这个方法来判别薪酬的等级,并计算每一等级的人数。SQL代码如下;
SELECT
CASE WHEN salary = 500 THEN 1
WHEN salary 500 AND salary = 600 THEN 2
WHEN salary 600 AND salary = 800 THEN 3
WHEN salary 800 AND salary = 1000 THEN 4
ELSE NULL END salary_class,
COUNT(*)
FROM Table_A
GROUP BY
CASE WHEN salary = 500 THEN 1
WHEN salary 500 AND salary = 600 THEN 2
WHEN salary 600 AND salary = 800 THEN 3
WHEN salary 800 AND salary = 1000 THEN 4
ELSE NULL END;
二,用一个SQL句子完结不同条件的分组。
有如下数据
国家(country) 性别(sex) 人口(population)
我国 1 340
我国 2 260
美国 1 45
美国 2 55
加拿大 1 51
加拿大 2 49
英国 1 40
英国 2 60
依照国家和性别进行分组,得出成果如下
国家 男 女
我国 340 260
美国 45 55
加拿大 51 49
英国 40 60
一般情况下,用UNION也能够完结用一条句子进行查询。可是那样添加耗费(两个Select部分),并且SQL句子会比较长。
下面是一个是用Case函数来完结这个功用的比如
SELECT country,
SUM( CASE WHEN sex = 1 THEN
population ELSE 0 END), 男性人口
SUM( CASE WHEN sex = 2 THEN
population ELSE 0 END) 女人人口
FROM Table_A
GROUP BY country;
这样咱们运用Select,完结对二维表的输出方式,充沛显现了Case函数的强壮。
三,在Check中运用Case函数。
在Check中运用Case函数在许多情况下都是十分不错的处理方法。可能有许多人底子就不必Check,那么我主张你在看过下面的比如之后也测验一下在SQL中运用Check。
下面咱们来举个比如
公司A,这个公司有个规则,女职工的薪酬有必要高于1000块。假如用Check和Case来体现的话,如下所示
CONSTRAINT check_salary CHECK
( CASE WHEN sex = 2
THEN CASE WHEN salary 1000
THEN 1 ELSE 0 END
ELSE 1 END = 1 )
假如单纯运用Check,如下所示
CONSTRAINT check_salary CHECK
( sex = 2 AND salary 1000 )
女职工的条件却是契合了,男职工就无法输入了。
Select top 100 State,JoinState,
(case when State=1 and Joinstate=0 then 2 when State=1 and JoinState=1 then 1 else 0 end) as usestate from UserInfo
(2)
select ID,Username,namer=(case when(score =50) then 实习
when(score 50 and score =500 ) then 赤脚医生
when(score 500 and score =1000 ) then 村卫生员
when(score 1000 and score =1500 ) then 乡卫生员
when(score 1500 and score =2000 ) then 镇卫生员
when(score 2000 and score =3000 ) then 医生
when(score 3000 and score =5000 ) then 主治医生
when(score 5000 and score =10000 ) then 副主任医生
when(score 10000 and score =20000 ) then 主任医生
when(score 20000 and score =50000 ) then 健康大使
else 健康大使 end ), (SELECT count(id)
FROM jk01_YiWen_Question
WHERE UserID = dbo.jk01_Member.ID) as questionnum
from jk01_Member
oracle dbconsole不能发动的解决方法dongfang