SQL中的case-when,if-else实例
【SQL】SQL中CaseWhen的用法

【SQL】SQL中CaseWhen的⽤法Case具有两种格式。
简单Case函数和Case搜索函数。
--简单Case函数CASE sexWHEN'1'THEN'男'WHEN'2'THEN'⼥'ELSE'其他'END--Case搜索函数CASE WHEN sex ='1'THEN'男'WHEN sex ='2'THEN'⼥'ELSE'其他'END两种⽅式,可以实现相同的功能。
简单Case函数的写法相对⽐较简洁,但是和Case搜索函数相⽐,功能⽅⾯会有些限制,⽐如写判断式。
还有⼀个需要注意的问题,Case函数只返回第⼀个符合条件的值,剩下的Case部分将会被⾃动忽略。
--下⾯这段SQL,你永远⽆法得到“第⼆类”这个结果CASE WHEN col_1 IN ( 'a', 'b') THEN'第⼀类'WHEN col_1 IN ('a') THEN'第⼆类'ELSE'其他'END下⾯我们来看⼀下,使⽤Case函数都能做些什么事情。
⼀,已知数据按照另外⼀种⽅式进⾏分组,分析。
有如下数据:(为了看得更清楚,我并没有使⽤国家代码,⽽是直接⽤国家名作为Primary Key)根据这个国家⼈⼝数据,统计亚洲和北美洲的⼈⼝数量。
应该得到下⾯这个结果。
解决这个问题,你会怎么做?⽣成⼀个带有洲Code的View是⼀个解决⽅法,但是这样很难动态的改变统计的⽅式。
如果使⽤Case函数,SQL代码如下:SELECT SUM(population),CASE countryWHEN'中国'THEN'亚洲'WHEN'印度'THEN'亚洲'WHEN'⽇本'THEN'亚洲'WHEN'美国'THEN'北美洲'WHEN'加拿⼤'THEN'北美洲'WHEN'墨西哥'THEN'北美洲'ELSE'其他'ENDFROM Table_AGROUP BYCASE countryWHEN'中国'THEN'亚洲'WHEN'印度'THEN'亚洲'WHEN'⽇本'THEN'亚洲'WHEN'美国'THEN'北美洲'WHEN'加拿⼤'THEN'北美洲'WHEN'墨西哥'THEN'北美洲'ELSE'其他'END;这⾥笔者解释⼀下上⾯的分组过程,先按照country字段分三组,然后显⽰出每组⾥⾯的⼈⼝数,已经分组的条件。
OracleSql关于case-when,if-then,decode

OracleSql关于case-when,if-then,decode 今天在采集58-⼆⼿市场数据时,遇到⼀个问题:⽹页的样式不够规范导致采到的数据奇形怪状,具体的数据表如下:这种数据不利于观察,也⽆法⽤于分析。
我是⽤case-when来进⾏初步的清洗。
(substr中的startindex和endindex需要⾃⼰数~)selectcase when t.condition like'<!-- 成⾊ -->%'thensubstr(t.condition, 20, length(t.condition) -26) whent.condition like'成⾊:%'thensubstr(t.condition, 12, length(t.condition) -18) else'\N'END CONDITION,t.classification2,CASE WHEN T.RELEASE_DATE LIKE'<li class="time" title="发布⽇期">%'thensubstr(t.release_date,31,length(t.release_date)-35) whent.release_date like'<li class="time">%'thensubstr(t.release_date,18,length(t.release_date)-22) whent.release_date like'更新时间%'thensubstr(t.release_date,6,length(t.release_date))else'\N'END release_date,case when t.price like'<span%>'thensubstr(t.price,27,length(t.price)-34) whent.price like'%<'thensubstr(t.price,27,length(t.price)-36)||SUBSTR(T.PRICE,LENGTH(T.PRICE)-2,LENGTH(T.PRICE)) WHENT.PRICE LIKE'价格:%'THENSUBSTR(T.PRICE,26,LENGTH(T.PRICE)-35) ELSE'\N'END PRICE,CASE WHEN T.SELLERNAME LIKE'linkman%'''thensubstr(t.sellername,10,length(t.sellername)-10) whenT.SELLERNAME LIKE'linkman%>'thensubstr(t.sellername,10,length(t.sellername)-185) else'\N'end sellernamefrom TABLENAME t这样得到的数据就⽐较规范了:由此,可以总结下case-when的语法:CASE WHEN condition1THEN sentence1WHEN condition2THEN sentence2...ELSEsentenceNEND除此之外,还可以使⽤if-then-elif-else。
mysql case when用法sql 实例

mysql case when用法sql 实例一、概述MySQL中的CASE WHEN语句是一种条件语句,可以根据不同的条件执行不同的操作。
它通常与SELECT语句结合使用,用于在查询结果中根据条件进行分类和筛选。
下面是一个简单的MySQL CASE WHEN用法SQL实例,演示了如何使用该语句进行条件判断和结果输出。
二、实例假设我们有一个名为"students"的表格,其中包含学生的姓名、年龄和成绩等信息。
现在我们需要根据成绩筛选出成绩大于等于60的学生,并按照年龄进行排序。
以下是对应的SQL查询语句:```sqlSELECT name, age, scoreFROM studentsWHERE score >= 60ORDER BY age DESC;```现在,我们可以通过在WHERE子句中使用CASE WHEN语句来进一步筛选出特定成绩范围的学生。
例如,假设我们想要筛选出成绩在70-80之间的学生,可以这样写:```sqlSELECT name, age, scoreFROM studentsWHERE score >= 70 AND score <= 80ORDER BY age DESC;```在这个例子中,我们使用了两个CASE WHEN语句来根据成绩范围进行筛选。
第一个CASE WHEN语句用于判断成绩是否大于等于70,如果是,则执行第二个WHERE子句进行进一步筛选。
这样就可以根据不同的条件执行不同的操作,从而得到符合要求的结果。
三、注意事项在使用CASE WHEN语句时,需要注意以下几点:1. CASE WHEN语句通常与SELECT语句结合使用,用于在查询结果中进行条件判断和筛选。
2. CASE WHEN语句中的条件表达式可以使用比较运算符(如大于、小于、等于等)和逻辑运算符(如AND、OR等)进行组合。
3. CASE WHEN语句的结果通常使用其他WHERE子句或ORDER BY子句中的条件进行应用。
Sql_Case_When用法用例

SQL中Case的使用方法Case具有两种格式。
简单Case函数和Case搜索函数。
--简单Case函数CASE sexWHEN'1'THEN'男'WHEN'2'THEN'女'ELSE'其他'END--Case搜索函数CASE WHEN sex ='1'THEN'男'WHEN sex ='2'THEN'女'ELSE'其他'END这两种方式,可以实现相同的功能。
简单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 countryWHEN'中国'THEN'亚洲'WHEN'印度'THEN'亚洲'WHEN'日本'THEN'亚洲'WHEN'美国'THEN'北美洲'WHEN'加拿大'THEN'北美洲'WHEN'墨西哥'THEN'北美洲'ELSE'其他'ENDFROM Table_AGROUP BY CASE countryWHEN'中国'THEN'亚洲'WHEN'印度'THEN'亚洲'WHEN'日本'THEN'亚洲'WHEN'美国'THEN'北美洲'WHEN'加拿大'THEN'北美洲'WHEN'墨西哥'THEN'北美洲'ELSE'其他'END;同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。
SQL中如何实现三元运算符效果妙用“CASEWHEN语句”

SQL中如何实现三元运算符效果妙用“CASEWHEN语句”
在SQL中,可以使用CASE WHEN语句来实现三元运算符的效果。
CASE WHEN语句可以根据满足条件的不同情况进行选择,类似于编程语言中的
if-else语句。
下面是一个示例:
```
SELECT column1, column2,
CASE WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE value3
END AS result
FROM table;
```
在上面的示例中,根据不同的条件(condition1, condition2),选择对应的值(value1, value2),并将结果命名为result列。
如果条件都不满足,则选择默认值(value3)。
需要注意的是,CASEWHEN语句是按顺序进行判断,当满足第一个条
件时,后续条件将不会再被判断。
因此,在书写时,应将满足性质更加特殊的条件放在前面。
另外,CASEWHEN语句还可以在其他SQL语句中使用,比如在UPDATE 语句中根据条件更新数据,或在WHERE子句中根据条件筛选数据等等。
sql中 case when if的用法-概述说明以及解释

sql中case when if的用法-概述说明以及解释1.引言1.1 概述SQL(Structured Query Language)是一种用于管理和操作关系型数据库的编程语言。
在SQL中,有许多不同的语句和函数可用于查询、插入、更新和删除数据库中的数据。
其中,CASE、WHEN和IF是三个常用的条件判断语句,用于根据不同的条件执行不同的逻辑操作。
CASE语句是一种灵活的条件语句,它允许根据不同的条件执行不同的代码块。
它的基本语法如下:sqlCASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE resultNEND其中,condition是一个布尔表达式,可以是任何SQL表达式,result 是当满足条件时要返回的结果。
CASE语句从上到下逐一判断每个条件,一旦找到第一个满足条件的,就会返回对应的结果,并结束整个CASE语句。
WHEN语句是CASE语句中的一个关键字,用于指定一个条件判断。
它可以包含多个WHEN语句,以执行更复杂的条件判断逻辑。
每个WHEN 语句后面必须跟着一个THEN关键字,表示满足该条件时要执行的操作。
IF语句是SQL中的条件语句之一,它用于根据一个条件的真假来执行不同的代码块。
它的基本语法如下:sqlIF condition THENstatements1ELSEstatements2END IF其中,condition是一个布尔表达式,statements1是当条件为真时要执行的代码,statements2是当条件为假时要执行的代码。
本文将重点介绍SQL中CASE、WHEN和IF语句的用法,包括语法和实例,帮助读者更好地理解和应用这些条件判断语句。
在接下来的章节中,将逐一介绍每个语句的具体用法和注意事项。
1.2 文章结构本文将分为引言、正文和结论三部分来探讨SQL中CASE WHEN和IF的用法。
SQL语句中CASE WHEN的使用实例

SQL语句中CASE WHEN的使用实例SQL中的CASE WHEN语句是经常要用到的,下面将结合实例,为您详解CASE WHEN语句的使用,供您参考,希望对您学习SQL语句能有所帮助。
我随手建了这样一个表:并将上面的数据都插入到表中。
经过一番尝试和修改,终于得到了答案:这里我要说的,其实是SQL中case when的用法。
它在普通的SQL语句中似乎并不常见,我本人以前也没在实际项目中使用过。
遇到类似问题,往往通过代码或多条SQL语句实现。
或者是如下这种丑陋的SQL,并且还伴随着很多潜在的BUG(如,当没有‘负’时)。
我们不妨来复习一下CASE WHEN的语法。
CASE WHEN有两种用法,一种是类似上面例子中那样的简单CASE函数:还有一种是CASE搜索函数:其中result='胜'可以替换为其他条件表达式。
如果有多个CASE WHEN表达式符合条件,将只返回第一个符合条件的子句,其余子句将被忽略。
用CASE WHEN语句可以简化我们平时工作中遇到的很多问题。
如性别在表中存的是数字1、2,但是希望查询出来男、女时,可以这样:是不是很强大呢?巧用SQL中case when语句实现模糊查询使用SQL中case when语句,可以实现我们需要的模糊查询,下面为您介绍SQL case when语句实现模糊查询的脚本,希望对您学习SQL中case when语句的使用有所启示。
我们在进行项目开发中,经常会遇到多条件模糊查询的需求。
对此,我们常见的解决方案有两种:一是在程序端拼接SQL字符串,根据是否选择了某个条件,构造相应的SQL字符串;二是在数据库的存储过程中使用动态的SQL语句。
其本质也是拼接SQL字符串,不过是从程序端转移到数据库端而已。
这两种方式的缺点是显而易见的:一是当多个条件每个都可为空时,要使用多个if语句进行判断;二是拼接的SQL语句容易产生SQL注入漏洞。
最近写数据库存储过程的时候经常使用case when 语句,正好可以用这个语句解决一下以上问题。
sql里面的case when用法

sql里面的case when用法在SQL中,CASE WHEN语句用于根据条件对表达式进行分支处理。
它的一般语法如下:CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE resultEND其中,condition1、condition2等为条件表达式,result1、result2等为相应条件满足时返回的结果。
ELSE部分是可选的,用于处理当所有条件都不满足时的情况。
下面是一些CASE WHEN语句的示例用法:1. 使用CASE WHEN处理固定条件:SELECT column1, column2,CASEWHEN column1 = 'value1' THEN 'result1'WHEN column1 = 'value2' THEN 'result2'ELSE 'result3'END AS new_columnFROM table;2. 使用CASE WHEN处理根据表达式的不同结果返回不同结果:SELECT column1, column2,CASEWHEN column1 > column2 THEN 'column1 is greater'WHEN column1 < column2 THEN 'column2 is greater'ELSE 'column1 is equal to column2'END AS comparison_resultFROM table;3. 使用CASE WHEN作为WHERE子句条件:SELECT column1, column2FROM tableWHERE CASEWHEN condition1 THEN column1WHEN condition2 THEN column2END = 'value';4. 使用CASE WHEN作为排序条件:SELECT column1, column2FROM tableORDER BYCASEWHEN condition1 THEN column1WHEN condition2 THEN column2END DESC;这些示例展示了CASE WHEN语句在SQL中的一些常见用法,但实际应用中可以根据需求灵活使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
create database EXAM
go
create table student
(stuName varchar(10)not null,
stuNO int primary key not null,
stuSex char(2)check(stuSex='男'or stuSex='女'),
stuAge int,
stuSeat int,
stuAddress varchar(40)
)
GO
insert into student values('张秋丽','25301','女','21','1','北京海淀'),
('李文才','25302','男','25','2','天津'),
('张三','25303','男','22','3','北京海淀'),
('红尘','25304','女','21','4','湖南长沙'),
('段林希','25305','女','20','5','江西赣州'),
('魏晨','25306','男','23','6','河北石家庄'),
('郑爽','25307','女','20','7',''),
('张杰','25308','男','21','8',''),
('王洁','25309','女','23','9','湖南怀化'),
('刘欣','253010','女','21','10','北京')
create table exam
(ExamNO int primary key,
stuNO int not null,
WrittenExam int,
LabExam int
)
GO
insert into exam values(01,250301,86,89),
(02,250302,67,78),
(03,250303,76,80),
(04,250304,79,56),
(05,250305,56,63),
(06,250306,67,60),
(07,250307,90,83),
(08,250308,80,79),
(09,250309,92,90),
(10,250310,55,58)
--统计并显示本班笔试平均分,如果平均分在以上,显示“成绩优秀“,并显示前三名学员的考试信息;如果在以下,显示“本班成绩较差“,并显示后三名学员的考试信息。
Declare@myavg float--声明一个变量
select@myavg=AVG(writtenExam)from exam
print'本班平均分'+convert(varchar(5),@myavg)
if (@myavg>70)
begin
print'本班笔试成绩优秀,前三名的成绩为:'
select top 3 *from exam order by writtenExam DESC
end
ELSE
begin
print'本班成绩较差,后三名的成绩为:'
select top 3*from exam order by writtenExam
end
运行结果:
--本次考试成绩较差,假定要提分,确保每人笔试都通过。
提分规则很简单,先每人都加分,看是否都通过,如果没有全部通过,每人再加分,再看是否都通过,如此反复提分,直到所有人都通过为止。
学员成绩表:
Begin tran--开始一个事务
Declare@n int
while (1=1)--条件永远成立
begin
select@n=count(*)from exam
where writtenExam<60 --统计不及格人数
if(@n>0)
update exam
set writtenExam=writtenExam+2 --全部加分
else
break--推出循环
end
print'加分后的成绩:'
select*from exam
Commit tran--提交事务
Rollback tran--回滚事务
--采用ABCDE五级打分制来显示笔试成绩。
--A级: 90分以上
--B级:80-分
--C级: 70-分
--D级:60-分
--E级:60分以下
--用到的就是CASE--WHEN--
PRINT'分级后的成绩显示如下:'
select stuNO,
成绩=case
when writtenExam<60 then'E'
when writtenExam between 60 and 70 then'D'
when writtenExam between 70 and 80 then'C'
when writtenExam between 80 and 90 then'B' else'A'
end
from exam
--请根据平均分和下面的评分规则,编写T-SQL语句查询学员的成绩,如上图所示。
-- 优:分以上
-- 良:-分
-- 中:-分
-- 差:-分
-- 不及格:分以下
SELECT考号=ExamNO,学号=stuNO,笔试=writtenExam,机试=labExam,
平均分=(writtenExam+labExam)/2,
等级=CASE
WHEN (writtenExam+labExam)/2<60 THEN'不及格'
WHEN (writtenExam+labExam)/2 BETWEEN 60 AND 69 THEN'差' WHEN (writtenExam+labExam)/2 BETWEEN 70 AND 79 THEN'中' WHEN (writtenExam+labExam)/2 BETWEEN 80 AND 89 THEN'良' ElSE'优'
END
FROM exam。