SQL CASE WHEN的用法 sql里面的case when用法
yuyutoo 2024-10-12 01:43 18 浏览 0 评论
Case具有两种格式。简单Case函数和Case搜索函数。
简单Case函数
1 CASE sex
2 WHEN '1' THEN '男'
3 WHEN '2' THEN '女'
4 ELSE '其他' END
Case搜索函数
1 CASE WHEN sex = '1' THEN '男'
2 WHEN sex = '2' THEN '女'
3 ELSE '其他' END
两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
------案例:查询核价单中品号、品号与工艺是否出现在工单工艺的品号与工艺中
SELECT DISTINCT MOCTA.TA006 as 产品品号,SFCTA.TA004 as 工艺,CMSMW.MW002 as 工艺名称 ,
(CASE WHEN (MOCTA.TA006 NOT IN (SELECT MOCTN.TN004 FROM MOCTN )) THEN '新'
WHEN ((MOCTA.TA006 IN (SELECT MOCTN.TN004 FROM MOCTN))
AND (SFCTA.TA004 NOT IN (SELECT MOCTN.TN007 FROM MOCTN WHERE MOCTA.TA006= MOCTN.TN004 ))) THEN '新'
ELSE '历史' END )产品属性
FROM MOCTA as MOCTA
Left JOIN SFCTA as SFCTA On MOCTA.TA001=SFCTA.TA001 and MOCTA.TA002=SFCTA.TA002
Left JOIN CMSMW as CMSMW On SFCTA.TA004=CMSMW.MW001
WHERE ((MOCTA.TA013 = 'Y')AND (SFCTA.TA005 = '2'))
and ((MOCTA.TA006 NOT IN (SELECT MOCTN.TN004 FROM MOCTN ))
or((MOCTA.TA006 IN (SELECT MOCTN.TN004 FROM MOCTN)
AND (SFCTA.TA004 NOT IN (SELECT MOCTN.TN007 FROM MOCTN WHERE MOCTA.TA006= MOCTN.TN004 and MOCTN.TN013 not like '%一次%'))))---品号不在核价单中,或品号在核价单中但加工工艺不在核价单中,核价单备注中不包括一次性价格
order by MOCTA.TA006, SFCTA.TA004
---------------------------CASE WHEN 的更多应用(转载)
一、已知数据按照另外一种方式进行分组,分析
判断是不是在一个类中,然后聚合求出总数
1.求出每个省学生的个数
1 SELECT
2 CASE c.city
3 WHEN '哈尔滨' THEN
4 '黑龙江'
5 WHEN '沈阳' THEN
6 '辽宁'
7 WHEN '长春' THEN
8 '吉林'
9 WHEN '齐齐哈尔' THEN
10 '黑龙江'
11 ELSE
12 '其他地区'
13 END AS province,
14 sum(c.city_count) as stu_nums
15 FROM
16 (
17 SELECT
18 city,
19 count(city) city_count
20 FROM
21 stu_info
22 GROUP BY
23 city
24 ) c
25 GROUP BY
26 CASE c.city
27 WHEN '哈尔滨' THEN
28 '黑龙江'
29 WHEN '沈阳' THEN
30 '辽宁'
31 WHEN '长春' THEN
32 '吉林'
33 WHEN '齐齐哈尔' THEN
34 '黑龙江'
35 ELSE
36 '其他地区'
37 END ORDER BY stu_nums desc;
2.判断学生成绩等级
1 select case
2 when grade >=60 and grade < 70 then 'D'
3 when grade >=70 and grade <80 then 'C'
4 when grade >=80 and grade <90 then 'B'
5 when grade >=90 and grade <=100 then 'A'
6 else 'E' end as level ,count(*) as stu_nums
7 from stu_grade
8 GROUP BY
9 case
10 when grade >=60 and grade < 70 then 'D'
11 when grade >=70 and grade <80 then 'C'
12 when grade >=80 and grade <90 then 'B'
13 when grade >=90 and grade <=100 then 'A'
14 else 'E' end ;
二、用一个SQL语句完成不同条件的分组
一行显示出每个省份的男女人数
普通情况下,用UNION也可以实现用一条语句进行查询。但是那样增加消耗(两个Select部分),而且SQL语句会比较长。下面是一个是用Case函数来完成这个功能的例子
1 select
2 province,
3 sum(case when sex= 'F' then nums else 0 end ) AS F,
4 sum(case when sex = 'M' then nums else 0 end ) AS M
5 from
6 stu_province
7 GROUP BY province
8 ORDER BY F desc;
三、根据条件有选择的UPDATE
3.1例,有如下更新条件
1.工资5000以上的职员,工资减少10%
很容易考虑的是选择执行两次UPDATE语句,如下所示
--条件1(工资5000以上的职员,工资减少10%)
1 UPDATE emp
2 SET salary = salary * 0.9
3 WHERE
4 salary >= 5000;
2.工资在2000到4600之间的职员,工资增加15%
--条件2(工资在2000到4600之间的职员,工资增加15%)
1 UPDATE Personnel SET salary = salary * 1.15
2 WHERE salary >= 2000 AND salary < 4600;
3.发现之前5000的员工编程5175,反而涨薪了,反之如果先执行涨薪在降薪,4600的会比之前少,如果想一个sql执行
UPDATE emp
2 SET salary = CASE
3 WHEN salary >= 2000
4 AND salary <= 4600 THEN
5 salary * 1.15
6 WHEN salary >= 5000 THEN
7 salary * 0.9
8 ELSE
9 salary
10 END;
这里要注意一点,最后一行的ELSE salary是必需的,要是没有这行,不符合这两个条件的人的工资将会被写成NUll,那可就大事不妙了。在Case函数中Else部分的默认值是NULL,这点是需要注意的地方。
3.2.互换信息
需求,将Tom和Lily互换部门
1 UPDATE emp
2 SET dept_id = CASE
3 WHEN dept_id = 1 THEN
4 2
5 WHEN dept_id = 2 THEN
6 1
7 ELSE
8 dept_id
9 END;
结果显示
四、两个表数据是否一致的检查
Case函数不同于DECODE函数。在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS等等。比如说使用IN,EXISTS,可以进行子查询,从而 实现更多的功能。 下面具个例子来说明,检测员工是否在部门中,返回结果'Matched',如果没有找到,返回结果'Unmatched'。 要实现下面这个功能,可以使用下面两条语句
原始表还是之前的emp,新增dept表
1 SELECT
2 ename,
3 dept_id,
4 CASE
5 WHEN dept_id IN (SELECT id FROM dept) THEN
6 'Matched'
7 ELSE
8 'UnMatched'
9 END as isMatch
10 FROM
11 emp
相关推荐
- 从零搭建高可用的 MySQL 主从复制架构(基于 Linux 实战指南)
-
背景在生产环境中,单点MySQL数据库容易成为性能瓶颈或单点故障源。搭建MySQL主从复制架构,可以实现读写分离、高可用,提升系统的整体稳定性与扩展性。...
- 国外大神成功让Nexus4吃上安卓6.0:基本可正常使用
-
IT之家讯10月9日消息谷歌已经于10月6日正式开启了Nexus设备Android6.0Marshmallow系统的OTA升级推送。根据之前报道的消息,老一批的Nexus手机如Nexus4/Ne...
- 急死!CPU被挖矿了,却找不到哪个进程
-
CPU起飞了最近有朋友在群里反馈,自己服务器的CPU一直处于高占用状态,但用...
- 甜甜的安卓5.0却让手机ROOT难度大大增加
-
IT之家(www.ithome.com):甜甜的安卓5.0却让手机ROOT难度大大增加对设备进行ROOT,毫无疑问,这是安卓最美丽的地方之一,不管是对于消费者来说还是开发者。Root意味着掌握更多的权...
- Linux基础知识(linux基础知识点及答案)
-
系统目录结构/bin:命令和应用程序。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev:dev是Device(设备)的缩写,该目录...
- Linux 内核 6.15 发布:内存、网络、文件系统全面升级!
-
核心增强:性能与安全双飞升!Linux内核6.15的正式版!虽然因一个临门一脚的Bug晚了几小时,但最终还是带着一堆硬核更新闪亮登场!...
- AlmaLinux 9.6 发布,新增功能亮点纷呈!
-
距离上一版本AlmaLinux9.5发布六个月后,基于5.14内核的AlmaLinux正式宣布其企业级Linux发行版的9.x系列第六个更新——AlmaLinux9.6(Sag...
- 理解Linux下的SELinux(linux seccomp)
-
理解Linux下的SELinux长久以来,每当遇到授权问题或者新安装的主机,我的第一反应是通过setenforce0命令禁用SELinux,来减少产生的权限问题,但是这并不是一个良好的习惯。这篇文章...
- 3个简单实用的网址导航网站(简洁的网站导航)
-
在我们使用电脑上网的时候经常会访问某些常用的网站,每一次都去通过搜索访问就比较浪费时间,添加在浏览器收藏夹不方便在其他电脑使用。找一个好用的网址导航网站就可以帮我们把所有常用的网址集合在一个页面,方便...
- 整点不一样的网站制作教程,教你怎么用网站模板制作网站#...
-
网站制作教程整点不一样的网站。不要再问我网站制作教程了,今天给你整个怎么用网站模板制作网站的教程。·1、登录账号进入后台。·2、选择模板。自助建站平台通常提供各种各样的网站模板,可以根据自己的需求和喜...
- 5个最好的外贸独立站模板,让你的网站更加专业
-
作为外贸行业从业者,一个专业且具有吸引力的网站是必不可少的。然而,建立一个专业的网站需要耗费大量的时间和精力,尤其是在设计和开发方面。为了帮助您缩短网站建设的时间和成本,以下是5个最好的外贸独立站模板...
- 网站建设模板 **网站建设模板:全面指南与创意构思*
-
网站建设模板**网站建设模板:全面指南与创意构思**随着互联网技术的迅猛发展,网站已成为企业、机构和个人展示自身形象、传递信息、实现交流的重要平台。本文将详细介绍网站建设的基本模板,并提供创意...
- 原地封神!一个只用套模板即可制作电子相册的网站
-
对于忙碌的年轻人来说,一键操作的模板意味着无需复杂的操作步骤,就能轻松制作出精美的电子相册。但是一个好的工具也是事关重要,最近发现了一款非常适合年轻人的模板---FLBOOK在线制作电子杂志平台,只需...
- 跨屏建站网kpfree免费网站模板2023.1.14发布更新
-
跨屏建站网kpfree免费网站模板2023.1.14发布更新,摒弃了之前的卡片式设计,采用了移动优先的设计原则,简化了页面设计风格,优化了代码,优化了图片质量,确保网页打开速度。砍掉了一些花哨而无用的...
- 响应式大型电子企业集团类网站模板源码-青柠资源网qnziyw.cn
-
模板信息:模板编号:10964模板编码:UTF8模板颜色:红色模板分类:科技、电子、数码设备适合行业:电子设备类企业模板介绍:本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手工书写D...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)