百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

SQL CASE WHEN的用法 sql里面的case when用法

yuyutoo 2024-10-12 01:43 14 浏览 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

相关推荐

ETCD 故障恢复(etc常见故障)

概述Kubernetes集群外部ETCD节点故障,导致kube-apiserver无法启动。...

在Ubuntu 16.04 LTS服务器上安装FreeRADIUS和Daloradius的方法

FreeRADIUS为AAARadiusLinux下开源解决方案,DaloRadius为图形化web管理工具。...

如何排查服务器被黑客入侵的迹象(黑客 抓取服务器数据)

---排查服务器是否被黑客入侵需要系统性地检查多个关键点,以下是一份详细的排查指南,包含具体命令、工具和应对策略:---###**一、快速初步检查**####1.**检查异常登录记录**...

使用 Fail Ban 日志分析 SSH 攻击行为

通过分析`fail2ban`日志可以识别和应对SSH暴力破解等攻击行为。以下是详细的操作流程和关键分析方法:---###**一、Fail2ban日志位置**Fail2ban的日志路径因系统配置...

《5 个实用技巧,提升你的服务器安全性,避免被黑客盯上!》

服务器的安全性至关重要,特别是在如今网络攻击频繁的情况下。如果你的服务器存在漏洞,黑客可能会利用这些漏洞进行攻击,甚至窃取数据。今天我们就来聊聊5个实用技巧,帮助你提升服务器的安全性,让你的系统更...

聊聊Spring AI Alibaba的YuQueDocumentReader

序本文主要研究一下SpringAIAlibaba的YuQueDocumentReaderYuQueDocumentReader...

Mac Docker环境,利用Canal实现MySQL同步ES

Canal的使用使用docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中,并在springboo...

RustDesk:开源远程控制工具的技术架构与全场景部署实战

一、开源远程控制领域的革新者1.1行业痛点与解决方案...

长安汽车一代CS75Plus2020款安装高德地图7.5

不用破解原车机,一代CS75Plus2020款,安装车机版高德地图7.5,有红绿灯读秒!废话不多讲,安装步骤如下:一、在拨号状态输入:在电话拨号界面,输入:*#518200#*(进入安卓设置界面,...

Zookeeper使用详解之常见操作篇(zookeeper ui)

一、Zookeeper的数据结构对于ZooKeeper而言,其存储结构类似于文件系统,也是一个树形目录服务,并通过Key-Value键值对的形式进行数据存储。其中,Key由斜线间隔的路径元素构成。对...

zk源码—4.会话的实现原理一(会话层的基本功能是什么)

大纲1.创建会话...

Zookeeper 可观测性最佳实践(zookeeper能够确保)

Zookeeper介绍ZooKeeper是一个开源的分布式协调服务,用于管理和协调分布式系统中的节点。它提供了一种高效、可靠的方式来解决分布式系统中的常见问题,如数据同步、配置管理、命名服务和集群...

服务器密码错误被锁定怎么解决(服务器密码错几次锁)

#服务器密码错误被锁定解决方案当服务器因多次密码错误导致账户被锁定时,可以按照以下步骤进行排查和解决:##一、确认锁定状态###1.检查账户锁定状态(Linux)```bash#查看账户锁定...

zk基础—4.zk实现分布式功能(分布式zk的使用)

大纲1.zk实现数据发布订阅...

《死神魂魄觉醒》卡死问题终极解决方案:从原理到实战的深度解析

在《死神魂魄觉醒》的斩魄刀交锋中,游戏卡死犹如突现的虚圈屏障,阻断玩家与尸魂界的连接。本文将从技术架构、解决方案、预防策略三个维度,深度剖析卡死问题的成因与应对之策,助力玩家突破次元壁障,畅享灵魂共鸣...

取消回复欢迎 发表评论: