SQL CASE WHEN的用法 sql里面的case when用法
yuyutoo 2024-10-12 01:43 3 浏览 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
相关推荐
- jQuery VS AngularJS 你更钟爱哪个?
-
在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...
- Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0
-
在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...
- 如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例
-
要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...
- 编程技巧:Jquery实时验证,指定长度的「负小数」
-
为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...
- 一篇文章带你用jquery mobile设计颜色拾取器
-
【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...
- 编程技巧:Jquery实时验证,指定长度的「正小数」
-
为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...
- jquery.validate检查数组全部验证
-
问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...
- Vue进阶(幺叁肆):npm查看包版本信息
-
第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...
- layui中使用lay-verify进行条件校验
-
一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...
- jQuery是什么?如何使用? jquery是什么功能组件
-
jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...
- django框架的表单form的理解和用法-9
-
表单呈现...
- jquery对上传文件的检测判断 jquery实现文件上传
-
总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...
- Nodejs之MEAN栈开发(四)-- form验证及图片上传
-
这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...
- 大数据开发基础之JAVA jquery 大数据java实战
-
上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...
- 推荐四个开源的jQuery可视化表单设计器
-
jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 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)