SQL中的case-when,if-else实例

合集下载

【SQL】SQL中CaseWhen的用法

【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

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用法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_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中如何实现三元运算符效果妙用“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的用法-概述说明以及解释

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的使用实例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用法在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中的一些常见用法,但实际应用中可以根据需求灵活使用。

SQL中的IFELSE(CASE语句的使用)

SQL中的IFELSE(CASE语句的使用)

SQL中的IFELSE(CASE语句的使⽤)⼤家对IF ELSE语句可能都很熟悉,它是⽤来对过程进⾏控制的。

在SQL的世界中CASE语句语句有类似的效果。

下⾯简单的介绍CASE语句的⽤法。

考虑下⾯的情况,假设有个user表,定义如下:CREATE TABLE USER(NAME VARCHAR(20) NOT NULL,---姓名SEX INTEGER,---性别(1、男 2、⼥)BIRTHDAY DATE---⽣⽇);CASE使⽤场合1:把user表导出⽣成⼀个⽂件,要求性别为男或⼥,⽽不是1和2,怎么办?我们可以⽤如下的语句处理:SELECTNAME,CASE SEXWHEN 1 THEN '男'ELSE '⼥'END AS SEX,BIRTHDAYFROM USER;CASE使⽤场合2:假设user⽬前没有值,然后你往user导⼊了⼀批数据,但是很不幸,错把男设置成为2,⽽把⼥设置成为1,现在要求你变换过来,怎么办?⽅法1:使⽤三条语句,先把2更新成3,接着把1更新成2,最后把3更新成1,很⿇烦,不是吗?UPDATE USER SET SEX=3 WHERE SEX=2;UPDATE USER SET SEX=2 WHERE SEX=1;UPDATE USER SET SEX=1 WHERE SEX=3;⽅法2:使⽤CASE语句UPDATE USER SET SEX=(CASE SEXWHEN 1 THEN 2WHEN 2 THEN 1ELSE SEXEND);CASE使⽤场合3:假设让你把张三的⽣⽇更新成1949-10-1,李四的⽣⽇更新成1997-7-1等,类似这样的更新由很多。

该怎么办呢?⾮常简单,⼤多数⼈会这么做。

update USER set BIRTHDAY='1949-10-1' where NAME='张三';update USER set BIRTHDAY='1997-7-1' where NAME='李四';当USER表的数据量⾮常⼤,⽽NAME字段上⼜没有索引时,每条语句都要进⾏全表扫描,如果这样的语句有很多,效率会⾮常差,这时候我们可以⽤CASE语句,如下:UPDATE USER SET BIRTHDAY=(CASE NAMEWHEN '张三' THEN '1949-10-1'WHEN '李四' THEN '1997-7-1'ELSE BIRTHDAYEND)where NAME in ('张三','李四');以上语句只进⾏⼀次全表扫描,效率⾮常⾼。

sql中case when用法

sql中case when用法

sql中case when用法在SQL 中,`CASE WHEN` 语句用于在查询中进行条件判断,类似于程序中的`if-else` 结构。

`CASE WHEN` 允许根据条件来选择不同的输出或执行不同的操作。

基本语法如下:```sqlSELECTcolumn1,column2,CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...WHEN conditionN THEN resultNELSE default_resultEND AS alias_nameFROMyour_table;```- `condition1`, `condition2`, ..., `conditionN` 是待检查的条件。

- `result1`, `result2`, ..., `resultN` 是与条件匹配时要返回的结果。

- `default_result` 是在没有任何条件匹配时要返回的默认结果。

- `alias_name` 是结果列的别名,可以省略。

下面是一个简单的例子,假设我们有一个学生成绩表,我们想要根据分数判断学生成绩等级:```sqlSELECTstudent_name,score,CASEWHEN score >= 90 THEN 'A'WHEN score >= 80 THEN 'B'WHEN score >= 70 THEN 'C'WHEN score >= 60 THEN 'D'ELSE 'F'END AS gradeFROMstudent_scores;```在这个例子中,根据不同的分数范围,我们使用`CASE WHEN` 语句给学生成绩分级,并将结果显示在查询结果中。

`CASE WHEN` 语句在查询中非常灵活,你可以根据具体的业务需求进行不同的条件判断和结果返回。

sql case when和if的用法特点

sql case when和if的用法特点

sql case when和if的用法特点SQL中的CASE WHEN和IF都是用于在查询中进行条件判断和返回结果的控制语句。

它们的用法和特点如下:1. CASE WHEN语句:- CASE WHEN语句用于根据条件表达式的结果来执行不同的操作。

- CASE WHEN语句可以包含多个WHEN子句和一个可选的ELSE子句。

-条件表达式可以是任何SQL表达式,包括列、函数等。

- CASE WHEN语句的语法是:CASE WHEN condition1 THENresult1 WHEN condition2 THEN result2 ELSE result3 END。

-当满足condition1时,返回result1;当满足condition2时,返回result2;否则返回result3。

- CASE WHEN语句可以嵌套在其他CASE WHEN语句中。

2. IF函数:- IF函数用于根据条件表达式的结果返回不同的值。

- IF函数的语法是:IF(condition, value_if_true,value_if_false)。

-当condition为真时,返回value_if_true;否则返回value_if_false。

- IF函数可以嵌套在其他IF函数中。

两者的主要区别在于:- CASE WHEN语句更适合于对多个条件进行判断和处理,可以根据不同的条件返回不同的结果。

- IF函数适用于对单个条件进行判断,只返回两个不同的值。

在实际使用中,根据具体情况选择CASE WHEN语句或IF函数来实现逻辑控制会更加灵活和方便。

同时,使用CASE WHEN语句可以更好地展示复杂的逻辑判断和处理过程,而IF函数则适用于简单的二选一情况。

SQL中的case-when,if-else实例

SQL中的case-when,if-else实例

create database EXAMgocreate 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))GOinsert 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)GOinsert 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)--统计并显示本班笔试平均分,如果平均分在以上,显示“成绩优秀“,并显示前三名学员的考试信息;如果在以下,显示“本班成绩较差“,并显示后三名学员的考试信息。

sqlifelse写法,和 多个casewhen用法

sqlifelse写法,和 多个casewhen用法

sqlifelse写法,和 多个casewhen⽤法set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO/** create by huang qing* modify by chaoxueling* modify date 2013-05-15*/ALTER PROCEDURE [dbo].[sp_GetPropsTop_ByPropsCount]@PageIndex int,@PageSize int,@OrderType intASBEGINif(@OrderType=1)beginwith Mem_TbUserPropsTop as(select A.*,b.PropsCountB,ROW_NUMBER() over (order by PropsCountA desc) as rowNumber from (select QdUserId,PropsId,propscnt as PropsCountA from tbuserpropscnt where propsid=153) as Afull join(select QdUserId,PropsId,propscnt as PropsCountB from tbuserpropscnt where propsid=154) as Bon a.qduserid=b.qduserid)select qduserid,PropsId,ISNULL(PropsCountA,0) as PropsCountA,ISNULL(PropsCountB,0) as PropsCountB, rowNumber from Mem_TbUserPropsTopwhere rowNumber>@PageSize*(@PageIndex-1) and RowNumber<order by PropsCountA descendelse if(@OrderType=0)beginwith Mem_TbUserPropsTop as(select A.*,b.PropsCountA,ROW_NUMBER() over (order by PropsCountB desc) as rowNumber from (select QdUserId,PropsId,propscnt as PropsCountB from tbuserpropscnt where propsid=154) as Afull join(select QdUserId,PropsId,propscnt as PropsCountA from tbuserpropscnt where propsid=153) as Bon a.qduserid=b.qduserid)select qduserid,PropsId,ISNULL(PropsCountA,0) as PropsCountA,ISNULL(PropsCountB,0) as PropsCountB, rowNumber from Mem_TbUserPropsTopwhere rowNumber>@PageSize*(@PageIndex-1) and RowNumber<order by PropsCountB descendelsebeginwith Mem_TbUserPropsTop as(select A.*,b.PropsCountA,ROW_NUMBER() over (order by PropsCountB desc) as rowNumber from (select QdUserId,PropsId,propscnt as PropsCountB from tbuserpropscnt where propsid=154) as Afull join(select QdUserId,PropsId,propscnt as PropsCountA from tbuserpropscnt where propsid=153) as Bon a.qduserid=b.qduserid)select qduserid,PropsId,ISNULL(PropsCountA,0) as PropsCountA,ISNULL(PropsCountB,0) as PropsCountB, rowNumber from Mem_TbUserPropsTopwhere rowNumber>@PageSize*(@PageIndex-1) and RowNumber<order by PropsCountB descendEND和order by case when @OrderType=1 then PropsCountA when @OrderType=0 then PropsCountB when @OrderType=2 then PropsCountC else PropsCountD end desc。

SQL中casewhenthenelse用法

SQL中casewhenthenelse用法

SQL中casewhenthenelse⽤法SQL如下:SELECT DISTINCTsy_haken_type,sy_sagyo_type,sy_kokyaku_cdFROmtbl_syukeiWHERE(sy_sagyo_ymd between '2010-01-01' AND '2012-12-30')AND(sy_staff_cd <> '' AND sy_staff_cd is not null) AND(sy_kokyaku_cd <> '' AND sy_kokyaku_cd is not null) ANDsy_kokyaku_cd='800001'ORDER BYsy_kokyaku_cd原SQL是这样的,然后将查询的结果再进⾏过滤出,所以这⾥为了解决内存,和释放SQL,就直接在SQL⾥⾯进⾏⼀次过滤,直接将外部的逻辑加⼊到SQL语句中SELECT DISTINCT(case when ((sy_haken_type='D' or sy_haken_type is null or sy_haken_type='')and sy_sagyo_type='0') =true then '1' else '0' end ) as daliy,(case when (sy_sagyo_type in ('1','2'))=true then '1' else '0' end) as haken,(case when ((sy_haken_type in('J','S')) and sy_sagyo_type='0')=true then '1' else '0' end) as short,(case when ((sy_haken_type in('M','L')) and sy_sagyo_type='0')=true then '1' else '0' end) as ful,sy_kokyaku_cdFROMtbl_syukeiWHERE(sy_sagyo_ymd between '2010-01-01' AND '2012-12-30')AND(sy_staff_cd <> '' AND sy_staff_cd is not null) AND(sy_kokyaku_cd <> '' AND sy_kokyaku_cd is not null) ANDsy_kokyaku_cd='800001'ORDER BYsy_kokyaku_cd查出的结果如下:这⾥case when 的使⽤性质就如同if ,假如 case when ((sy_haken_type='D' or sy_haken_type is null or sy_haken_type='')and sy_sagyo_type='0') =truethen '1'else '0'endSELECT(case gensen_type when '00' then 'aa'when '01' then 'xx'when '10' then 'bb'else 'more' end ) as cFROMtbl_kokyaku_kyuyoWHEREko_cd = '000002'//两种写法,返回⼀个值和三个值SELECT(case when gensen_type='00' then 'xxx' else 'bbb' end) as c,(case when gensen_type='01' then 'xxx' else 'bbb' end) as a,(case when gensen_type='10' then 'xxx' else 'bbb' end) as bFROMtbl_kokyaku_kyuyoWHEREko_cd = '000002'⽤⼀个表做实验。

SQLif和casewhen查询示例

SQLif和casewhen查询示例

SQLif和casewhen查询⽰例 在进⾏带有返回内容的条件查询的时候,if 和 case when 可以很⽅便的帮助我们查找满⾜条件的内容。

下⾯看看他们具体的使⽤⽅法。

if 条件的使⽤1if (condition, exp1, exp2)2-- condition==true: 返回exp1,否则返回exp2。

case when条件的使⽤case when 有两种写法:搜索⽅式1case when condition1 then exp1 -- 满⾜condition1 则返回 exp12when condition2 then exp23 ...4else expN5end精简⽅式1case col -- 某⼀字段2when condition1 then exp1 -- 满⾜condition1 则返回 exp13when condition2 then exp24 ...5else expo6end⽰例 1. 给定⼀个 salary 表,有 m = 男性和 f = ⼥性的值,交换所有的 f 和 m 值(例如,将所有 f 值更改为m,反之亦然)if 条件写法:1update salary set sex = ( if(sex='m', 'f', 'm'));case when 写法1update salary2set sex = ( case when sex='m'then'f'3when sex='f'then'm'end);2. 有⼀张 seat 座位表,平时⽤来储存学⽣名字和与他们相对应的座位 id。

其中纵列的 id 是连续递增的,要求改变相邻俩学⽣的座位。

转换思路为修改id,id为偶数则-1,为奇数且不是最⼤值则+1,然后将id升序排列if 条件写法:1select2if(mod(id, 2)=0, id-1, if(id=( select max(id) from seat), id, id+1))3as id, student4-- id为偶数则-1,为奇数且不是最⼤值则+15from seat6order by idcase when 写法:1select2case when id%2=0then id-1else (3case when id=(select max(id) from seat) then id else id+1end 4 ) end5as id, student6from seat order by id;。

Sql-----sqlserver中的if判断case...when

Sql-----sqlserver中的if判断case...when

Sql-----sqlserver中的if判断case...when与查询放到⼀块使⽤:语法:selectcasewhen范围条件then产⽣的结果when范围条件then产⽣的结果else不是以上范围产⽣的结果endfrom表名个⼈理解:在英⽂中 case 表⽰事件, when 表⽰什么时候,then 表⽰那时,当时, else 表⽰否则,,end 表⽰结束那么就可以理解为⼀件事的发⽣,有很多的事件段,在不同的时间段有不同的结果,可以⽤多个时间段和else 表⽰完整的事件,最后声明结束。

来个例⼦:⼀张表使⽤case when 算所得税,⼯资⼩于等于三千不扣钱,在三千和四千之间(包含四千)扣200,在四千和五千之间(包含五千)扣400,五千以上扣800也可以使⽤⼯资减去税收,计算实发当这个事件是⼀个完整的事件的时候也可以,根据条件算总数平均数之类计算:表中学历是本科的总⼯资和职称是实习⽣的平均⼯资这个时候else 也就不起作⽤了,可不写代码:select Name,Gongzi,(Gongzi-(casewhen GongZi <=3000then0when (Gongzi >3000and GongZi<=4000) then200when (Gongzi >4000and GongZi<=5000) then400else800end)) as ShifaGongzfrom dbo.obgexinziselectsum (casewhen XueLi ='本科'then GongZielse0end) as benkezonggongzi,avg (casewhen ZhiCheng ='实习⽣'then GongZiend) as shixishenggongzifrom dbo.obgexinzi计算⼯资简单使⽤select UserName,Exp_Decimal_01,Exp_Decimal_02,Exp_Decimal_04,Exp_Decimal_05,UserBankMark, (Exp_Decimal_01+Exp_Decimal_02) as Exp_Decimal_03,(Exp_Decimal_04+Exp_Decimal_05) as Exp_Decimal_06,(case when (UserBankMark is null or UserBankMark='') then0else (Exp_Decimal_01+Exp_Decimal_02)-(Exp_Decimal_04+Exp_Decimal_05)end) as Exp_Decimal_07,(case when not(UserBankMark is null or UserBankMark='') then0else (Exp_Decimal_01+Exp_Decimal_02)-(Exp_Decimal_04+Exp_Decimal_05)end) as Exp_Decimal_08from tbmdGongZiList。

SQLServer中使用判断语句(IFELSECASEWHEN)案例

SQLServer中使用判断语句(IFELSECASEWHEN)案例

SQLServer中使⽤判断语句(IFELSECASEWHEN)案例SQL Server判断语句(IF ELSE/CASE WHEN )执⾏顺序是 – 从上⾄下 – 从左⾄右 --,所当上⼀个条件满⾜时(⽆论下⾯条件是否满⾜),执⾏上个条件,当第⼀个条件不满⾜,第⼆个条件满⾜时,执⾏第个⼆条件1、IF ELSE不能⽤在SELECT中,只能是块,⽐如:IF …BEGIN…(代码块)ENDELSE (注意这⾥没有ELSE IF,要实现只能在下⾯的块中⽤IF判断)BEGIN…(代码块)END列:declare @num int --定义变量set @num=1 --赋值变量if(@num>10)beginselect * from 表1endelsebeginif(@num<0)select Top(20) * from 表2elseprint @numend2、CASE WHEN THEN ELSE END可以在SELECT中使⽤,但是要包括END结尾CASE …WHEN … (条件/代码块) THEN …(返回值/case when then else end)ELSE …(可省略)END列:declare @num int --定义变量set @num=111 --赋值变量select @num,casewhen @num<=100 then casewhen @num>=80 then ‘A'when @num>=60 then ‘B'else ‘C' endwhen @num>=200 then ‘优秀'else ‘haha'end到此这篇关于SQL Server中使⽤判断语句(IF ELSE/CASE WHEN )案例的⽂章就介绍到这了,更多相关SQL Server使⽤判断语句内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

case when else用法

case when else用法

在许多编程语言和数据库中,包括 SQL,你可以使用CASE表达式来实现类似于编程语言中的switch或if-else结构的条件逻辑。

在 SQL 中,CASE表达式允许你根据条件对查询结果进行条件处理。

下面是CASE WHEN的基本用法示例:
在这个示例中:
•CASE关键字用于指定开始一个CASE表达式。

•WHEN关键字后面跟随着一个条件,如果该条件为真,则执行相应的操作。

•ELSE关键字是可选的,用于指定当没有任何条件匹配时要执行的操作。

•END关键字表示CASE表达式的结束。

你可以根据具体的需求和条件,使用多个WHEN子句来处理不同的条件情况,并在ELSE子句中提供默认操作。

以下是一个更具体的示例:
这个示例中,根据不同的年龄范围,CASE WHEN语句将返回不同的描述信息。

你可以根据具体的业务需求和条件,使用CASE WHEN表达式来处理更复杂的逻辑,使你的查询结果更具有可读性和实用性。

sql中的case when语句案例

sql中的case when语句案例

sql中的case when语句案例在SQL中,CASE WHEN语句用于根据条件执行不同的逻辑分支。

下面是一个使用CASE WHEN语句的案例:假设我们有一个名为"Employees"的表,其中包含以下列:"ID", "Name", "Salary", 和"Department"。

我们想要创建一个查询,根据不同的部门,将员工的薪资增加不同的百分比。

```sqlSELECT ID, Name, Salary, Department,CASE DepartmentWHEN 'Sales' THEN Salary * 1.1 -- 增加10%的薪资WHEN 'IT' THEN Salary * 1.05 -- 增加5%的薪资WHEN 'HR' THEN Salary * 1.03 -- 增加3%的薪资ELSE Salary -- 其他部门薪资保持不变END AS AdjustedSalaryFROM Employees;```在上述案例中,我们使用了CASE WHEN语句根据不同的部门条件来增加员工的薪资。

如果员工属于"Sales"部门,薪资将增加10%;如果员工属于"IT"部门,薪资将增加5%;如果员工属于"HR"部门,薪资将增加3%;如果员工属于其他部门,薪资将保持不变。

通过CASE WHEN语句,我们可以根据不同的条件执行不同的逻辑操作,并在查询结果中显示调整后的薪资("AdjustedSalary")作为新的列。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档