志在指尖
用双手敲打未来

sql case when(sql case when用法详解)

sqlcasewhen用法详解

Case具有两种格局。简略Case函数和Case查找函数。
–简略Case函数
CASEsex
WHEN’1’THEN’男’
WHEN’2’THEN’女’
ELSE’其他’END
(注释:列名,这里是sex,假如放在case后,则显现在屏幕上的列名即为列名sex)
–Case查找函数
CASEWHENsex=’1’THEN’男’
WHENsex=’2’THEN’女’
ELSE’其他’END
(注释:列名,这里是sex,假如放在when后,若是不为整个CASEWHEN句子写个别号的话,则显现在屏幕上的列名即为整个CASEWHEN句子)
这两种方法,能够完结相同的功用。简略Case函数的写法相对比较简练,但是和Case查找函数相比,功用方面会有些限制,比如写判别式。
还有一个需求留意的问题,Case函数只返回第一个符合条件的值,剩余的Case部分将会被自动忽略。
–比如说,下面这段SQL,你永久无法得到“第二类”这个成果
CASEWHENcol_1IN(‘a’,’b’)THEN’第一类’
WHENcol_1IN(‘a’)THEN’第二类’
ELSE’其他’END
下面咱们来看一下,运用Case函数都能做些什么工作。
一,已知数据按照别的一种方法进行分组,分析。
有如下数据:(为了看得更清楚,我并没有运用国家代码,而是直接用国家名作为PrimaryKey)
国家(country)人口(population)
我国600
美国100
加拿大100
英国200
法国300
日本250
德国200
墨西哥50
印度250
根据这个国家人口数据,计算亚洲和北美洲的人口数量。应该得到下面这个成果。
洲人口
亚洲1100
北美洲250
其他700
想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变计算的方法。
假如运用Case函数,SQL代码如下:
SELECTSUM(population),
CASEcountry
WHEN’我国’THEN’亚洲’
WHEN’印度’THEN’亚洲’
WHEN’日本’THEN’亚洲’
WHEN’美国’THEN’北美洲’
WHEN’加拿大’THEN’北美洲’
WHEN’墨西哥’THEN’北美洲’
ELSE’其他’END
FROMTable_A
GROUPBYCASEcountry
WHEN’我国’THEN’亚洲’
WHEN’印度’THEN’亚洲’
WHEN’日本’THEN’亚洲’
WHEN’美国’THEN’北美洲’
WHEN’加拿大’THEN’北美洲’
WHEN’墨西哥’THEN’北美洲’
ELSE’其他’END;
注释:
上述句子能够这样理解,将
CASEcountry
WHEN’我国’THEN’亚洲’
WHEN’印度’THEN’亚洲’
WHEN’日本’THEN’亚洲’
WHEN’美国’THEN’北美洲’
WHEN’加拿大’THEN’北美洲’
WHEN’墨西哥’THEN’北美洲’
ELSE’其他’END
这个子句整体看作一列A,则上述句子就是一句一般的分组句子了:SELECTSUM(population),AFROMTable_AGROUPBYA;
相同的,咱们也能够用这个方法来判别薪酬的等级,并计算每一等级的人数。SQL代码如下;
SELECT
CASEWHENsalary<=500THEN’1′
WHENsalary>500ANDsalary<=600THEN’2′
WHENsalary>600ANDsalary<=800THEN’3′
WHENsalary>800ANDsalary<=1000THEN’4′
ELSENULLENDsalary_class,
COUNT(*)
FROMTable_A
GROUPBY
CASEWHENsalary<=500THEN’1′
WHENsalary>500ANDsalary<=600THEN’2′
WHENsalary>600ANDsalary<=800THEN’3′
WHENsalary>800ANDsalary<=1000THEN’4′
ELSENULLEND;
二,用一个SQL句子完结不同条件的分组。
有如下数据
国家(country)性别(sex)人口(population)
我国1340
我国2260
美国145
美国255
加拿大151
加拿大249
英国140
英国260
按照国家和性别进行分组,得出成果如下
国家男女
我国340260
美国4555
加拿大5149
英国4060
一般情况下,用UNION也能够完结用一条句子进行查询。但是那样增加消耗(两个Select部分),并且SQL句子会比较长。
下面是一个是用Case函数来完结这个功用的例子
SELECTcountry,
SUM(CASEWHENsex=’1’THEN
populationELSE0END),–男性人口
SUM(CASEWHENsex=’2’THEN
populationELSE0END)–女人人口
FROMTable_A
GROUPBYcountry;
这样咱们运用Select,完结对二维表的输出方式,充沛显现了Case函数的强大。sql
三,在Check中运用Case函数。
在Check中运用Case函数在许多情况下都是十分不错的解决方法。可能有许多人底子就不用Check,那么我主张你在看过下面的例子之后也测验一下在SQL中运用Check。
下面咱们来举个例子
公司A,这个公司有个规则,女职员的薪酬必须高于1000块。假如用Check和Case来体现的话,如下所示
CONSTRAINTcheck_salaryCHECK
(CASEWHENsex=’2′
THENCASEWHENsalary>1000
THEN1ELSE0END
ELSE1END=1)
假如单纯运用Check,如下所示
CONSTRAINTcheck_salaryCHECK
(sex=’2’ANDsalary>1000)
女职员的条件倒是符合了,男职员就无法输入了。
参阅:
SQL句子selectcasewhen谷歌
===============================================
在select子句里能支撑另一个select句子的完结方式如下(即要配合casewhen关键字):
select
casewhenlock_purpostin(SELECTidfromdata_dictionary)then(SELECTnamefromdata_dictionarywhereid=lock_purpost)elselock_purpostendaslock_purpost(别号),
casewhenlock_frameworkin(SELECTidfromdata_dictionary)then(SELECTnamefromdata_dictionarywhereid=lock_framework)elselock_frameworkendaslock_framework
fromv_photosum_attach;
注释:
1、这个句子看出,咱们能够在表v_photosum_attach上的一行数据行上对两个不同列lock_purpost和lock_framework各自进行一次独立的查询(另一个表,即when部分)和处理(then部分),即相当于能够在表v_photosum_attach上的同一行数据行上进行了屡次查询处理。
2、
select
casewhenlock_purpostin(SELECTidfromdata_dictionary)then(SELECTnamefromdata_dictionarywhereid=lock_purpost)elsenull(即若不符合when里的条件则该行上的列lock_purpost的列值置为null)endaslock_purpost(别号)
fromv_photosum_attach;
===============================================
SQL句子selectcasewhen(转)
分类:SQLServer2010-06-1718:172889人阅览评论(0)收藏举报
sqlgo
CASE可能是SQL中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你能够在WHERE子句中运用CASE。
首要让咱们看一下CASE的语法。在一般的SELECT中,其语法如下:
SELECT=
CASE
WHENTHEN
WHENTHEN
ELSE
END
在上面的代码中需求用详细的参数替代尖括号中的内容。下面是一个简略的例子:
USEpubs
GO
SELECT
Title,
‘PriceRange’=
CASE
WHENpriceISNULLTHEN’Unpriced’
WHENprice<10THEN’Bargain’
WHENpriceBETWEEN10and20THEN’Average’
ELSE’Gifttoimpressrelatives’
END
FROMtitles
ORDERBYprice
GO
这是CASE的典型用法,但是运用CASE其实能够做更多的工作。比如说下面的GROUPBY子句中的CASE:
SELECT’NumberofTitles’,Count(*)
FROMtitles
GROUPBY
CASE
WHENpriceISNULLTHEN’Unpriced’
WHENprice<10THEN’Bargain’
WHENpriceBETWEEN10and20THEN’Average’
ELSE’Gifttoimpressrelatives’
END
GO
你乃至还能够组合这些选项,添加一个ORDERBY子句,如下所示:
USEpubs
GO
SELECT
CASE
WHENpriceISNULLTHEN’Unpriced’
WHENprice<10THEN’Bargain’
WHENpriceBETWEEN10and20THEN’Average’
ELSE’Gifttoimpressrelatives’
ENDASRange,
Title
FROMtitles
GROUPBY
CASE
WHENpriceISNULLTHEN’Unpriced’
WHENprice<10THEN’Bargain’
WHENpriceBETWEEN10and20THEN’Average’
ELSE’Gifttoimpressrelatives’
END,
Title
ORDERBY
CASE
WHENpriceISNULLTHEN’Unpriced’
WHENprice<10THEN’Bargain’
WHENpriceBETWEEN10and20THEN’Average’
ELSE’Gifttoimpressrelatives’
END,
Title
GO
留意,为了在GROUPBY块中运用CASE,查询句子需求在GROUPBY块中重复SELECT块中的CASE块。
除了选择自定义字段之外,在许多情况下CASE都十分有用。再深化一步,你还能够得到你以前认为不可能得到的分组排序成果集
参阅:
selectcase句子百度
另见:
在select子句里如何完结另一个select句子的查询|在select子句里用逗号隔开的每个项的本质是一个表达式
oracle:case句子运用(用于select子句的case句子中能够运用in这个函数)

未经允许不得转载:IT技术网站 » sql case when(sql case when用法详解)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载