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

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

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

相关推荐

野路子科技!2步教你把手机改造成一个FTP服务器,支持PC互传

哈喽,大家好,我是野路子科技,今天来给大家带来一个教程,希望大家喜欢。正如标题所言,就是教大家如何把售价改造成FTP服务器,而这个时候估计有朋友会问了,把手机改造成FTP服务器有什么用呢?现在有Q...

不得不看:别样于Server-U的群晖文件存储服务器的搭建与使用

我先前的作品中,有着关于Server-U的ftp文件存储服务器的搭建与访问的头条文章和西瓜视频,而且我们通过各种方式也给各位粉丝介绍了如何突破局域网实现真正意义上的公网访问机制技术。关于Server-...

Qt三种方式实现FTP上传功能_qt引入qftp库

FTP协议FTP的中文名称是“文件传输协议”,是FileTransferProtocol三个英文单词的缩写。FTP协议是TCP/IP协议组中的协议之一,其传输效率非常高,在网络上传输大的文件时,经...

Filezilla文件服务器搭建及客户端的使用

FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户...

美能达柯美/震旦复印机FTP扫描怎么设置?

好多网友不知道怎么安装美能达/震旦复印机扫描,用得最多是SMB和FTP扫描,相对于SMB来说,FTP扫描安装步骤更为便捷,不容易出问题,不需要设置文件夹共享,所以小编推荐FTP来扫描以美能达机器为例详...

CCD(简易FTP服务器软件)_简单ftp服务器软件

CCD简易FTP服务器软件是一款很方便的FPT搭建工具,可以将我们的电脑快速变成一个FPT服务器。使用方法非常简单,只要运行软件就会自动生效,下载银行有该资源。该工具是不提供操作界面的,其他用户可以输...

Ubuntu系统搭建FTP服务器教程_ubuntu架设服务器

在Ubuntu系统上搭建FTP服务器是文件传输的一个非常实用方法,适合需要进行大量文件交换的场景。以下是一步步指导,帮助您在Ubuntu上成功搭建FTP服务器。1.安装vsftpd软件...

理光FTP扫描设置教程_理光ftp扫描设置方法

此教程主要用来解决WIN10系统下不能使用SMB文件夹扫描的问题,由于旧的SMB协议存在安全漏洞,所以微软在新的系统,WIN8/WIN10/SERVER201220162018里使用了新的SMB传...

纯小白如何利用wireshark学习网络技术

写在前面工欲善其事必先利其器!熟悉掌握一种神器对以后的工作必然是有帮助的,下面我将从简单的描述Wireshark的使用和自己思考去写,若有错误或不足还请批评指正。...

京东买13盘位32GB内存NAS:NAS系统安装设置教程

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:yasden你没有看错,我在京东自营商城购买硬件,组装了一台13盘位,32GB内存的NAS,硬盘有13个盘位!CPU是AMD的5500!本文...

FileZilla搭建FTP服务器图解教程_filezilla server搭建ftp服务器

...

python教程之FTP相关操作_python ftps

ftplib类库常用相关操作importftplibftp=ftplib.FTP()ftp.set_debuglevel(2)#打开调试级别2,显示详细信息ftp.connect(“I...

xftp怎么用,xftp怎么用,具体使用方法

Xftp是一款界面化的ftp传输工具,用起来方便简单,这里为大家分享下Xftp怎么使用?希望能帮到有需要的朋友。IIS7服务器管理工具可以批量管理、定时上传下载、同步操作、数据备份、到期提醒、自动更新...

树莓派文件上传和下载,详细步骤设置FTP服务器

在本指南中,详细记录了如何在树莓Pi上设置FTP。设置FTP可以在网络上轻松地将文件传输到Pi上。FTP是文件传输协议的缩写,只是一种通过网络在两个设备之间传输文件的方法。还有一种额外的方法,你可以用...

win10电脑操作系统,怎么设置FTP?windows10系统设置FTP操作方法

打印,打印,扫描的日常操作是每一个办公工作人员的必需专业技能,要应用FTP作用扫描文件到电脑上,最先要必须一台可以接受文件的FTP服务器。许多软件都需要收费标准进行,但人们还可以应用Windows的系...

取消回复欢迎 发表评论: