SQL逻辑判断.docx
- 文档编号:5097113
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:14
- 大小:20.51KB
SQL逻辑判断.docx
《SQL逻辑判断.docx》由会员分享,可在线阅读,更多相关《SQL逻辑判断.docx(14页珍藏版)》请在冰豆网上搜索。
SQL逻辑判断
CASE
计算条件列表并返回多个可能结果表达式之一。
CASE具有两种格式:
简单CASE函数将某个表达式与一组简单表达式进行比较以确定结果。
CASE搜索函数计算一组布尔表达式以确定结果。
两种格式都支持可选的ELSE参数。
语法
简单CASE函数:
CASEinput_expression
WHENwhen_expressionTHENresult_expression
[...n]
[
ELSEelse_result_expression
END
CASE搜索函数:
CASE
WHENBoolean_expressionTHENresult_expression
[...n]
[
ELSEelse_result_expression
END
参数
input_expression
是使用简单CASE格式时所计算的表达式。
Input_expression是任何有效的Microsoft®SQLServer™表达式。
WHENwhen_expression
使用简单CASE格式时input_expression所比较的简单表达式。
When_expression是任意有效的SQLServer表达式。
Input_expression和每个when_expression的数据类型必须相同,或者是隐性转换。
n
占位符,表明可以使用多个WHENwhen_expressionTHENresult_expression子句或WHENBoolean_expressionTHENresult_expression子句。
THENresult_expression
当input_expression=when_expression取值为TRUE,或者Boolean_expression取值为TRUE时返回的表达式。
resultexpression是任意有效的SQLServer表达式。
ELSEelse_result_expression
当比较运算取值不为TRUE时返回的表达式。
如果省略此参数并且比较运算取值不为TRUE,CASE将返回NULL值。
Else_result_expression是任意有效的SQLServer表达式。
Else_result_expression和所有result_expression的数据类型必须相同,或者必须是隐性转换。
WHENBoolean_expression
使用CASE搜索格式时所计算的布尔表达式。
Boolean_expression是任意有效的布尔表达式。
结果类型
从result_expressions和可选else_result_expression的类型集合中返回最高的优先规则类型。
有关更多信息,请参见数据类型的优先顺序。
结果值
简单CASE函数:
计算input_expression,然后按指定顺序对每个WHEN子句的input_expression=when_expression进行计算。
返回第一个取值为TRUE的(input_expression=when_expression)的result_expression。
如果没有取值为TRUE的input_expression=when_expression,则当指定ELSE子句时SQLServer将返回else_result_expression;若没有指定ELSE子句,则返回NULL值。
CASE搜索函数:
按指定顺序为每个WHEN子句的Boolean_expression求值。
返回第一个取值为TRUE的Boolean_expression的result_expression。
如果没有取值为TRUE的Boolean_expression,则当指定ELSE子句时SQLServer将返回else_result_expression;若没有指定ELSE子句,则返回NULL值。
示例
A.使用带有简单CASE函数的SELECT语句
在SELECT语句中,简单CASE函数仅检查是否相等,而不进行其它比较。
下面的示例使用CASE函数更改图书分类显示,以使其更易于理解。
USEpubs
GO
SELECT Category=
CASEtype
WHEN'popular_comp'THEN'PopularComputing'
WHEN'mod_cook'THEN'ModernCooking'
WHEN'business'THEN'Business'
WHEN'psychology'THEN'Psychology'
WHEN'trad_cook'THEN'TraditionalCooking'
ELSE'Notyetcategorized'
END,
CAST(titleASvarchar(25))AS'ShortenedTitle',
priceASPrice
FROMtitles
WHEREpriceISNOTNULL
ORDERBYtype,price
COMPUTEAVG(price)BYtype
GO
下面是结果集:
Category ShortenedTitle Price
----------------------------------------------------------------------
Business YouCanCombatComputerS2.99
Business CookingwithComputers:
S11.95
Business TheBusyExecutive'sData19.99
Business StraightTalkAboutCompu19.99
avg
==========================
13.73
Category ShortenedTitle Price
----------------------------------------------------------------------
ModernCooking TheGourmetMicrowave 2.99
ModernCooking SiliconValleyGastronomi19.99
avg
==========================
11.49
Category ShortenedTitle Price
----------------------------------------------------------------------
PopularComputing SecretsofSiliconValley20.00
PopularComputing ButIsItUserFriendly?
22.95
avg
==========================
21.48
Category ShortenedTitle Price
----------------------------------------------------------------------
Psychology LifeWithoutFear 7.00
Psychology EmotionalSecurity:
ANew7.99
Psychology IsAngertheEnemy?
10.95
Psychology ProlongedDataDeprivatio19.99
Psychology ComputerPhobicANDNon-P21.59
avg
==========================
13.50
Category ShortenedTitle Price
----------------------------------------------------------------------
TraditionalCookingFiftyYearsinBuckingham11.95
TraditionalCookingSushi,Anyone?
14.99
TraditionalCookingOnions,Leeks,andGarlic20.95
avg
==========================
15.96
(21row(s)affected)
B.使用带有简单CASE函数和CASE搜索函数的SELECT语句
在SELECT语句中,CASE搜索函数允许根据比较值在结果集内对值进行替换。
下面的示例根据图书的价格范围将价格(money列)显示为文本注释。
USEpubs
GO
SELECT 'PriceCategory'=
CASE
WHENpriceISNULLTHEN'Notyetpriced'
WHENprice<10THEN'VeryReasonableTitle'
WHENprice>=10andprice<20THEN'CoffeeTableTitle'
ELSE'Expensivebook!
'
END,
CAST(titleASvarchar(20))AS'ShortenedTitle'
FROMtitles
ORDERBYprice
GO
下面是结果集:
PriceCategory ShortenedTitle
-----------------------------------------
Notyetpriced NetEtiquette
Notyetpriced ThePsychologyofCo
VeryReasonableTitleTheGourmetMicrowav
VeryReasonableTitleYouCanCombatCompu
VeryReasonableTitleLifeWithoutFear
VeryReasonableTitleEmotionalSecurity:
CoffeeTableTitle IsAngertheEnemy?
CoffeeTableTitle CookingwithCompute
CoffeeTableTitle FiftyYearsinBucki
CoffeeTableTitle Sushi,Anyone?
CoffeeTableTitle ProlongedDataDepri
CoffeeTableTitle SiliconValleyGastr
CoffeeTableTitle StraightTalkAbout
CoffeeTableTitle TheBusyExecutive's
Expensivebook!
SecretsofSiliconV
Expensivebook!
Onions,Leeks,andG
Expensivebook!
ComputerPhobicAnd
Expensivebook!
ButIsItUserFrien
(18row(s)affected)
C.使用带有SUBSTRING和SELECT的CASE函数
下面的示例使用CASE和THEN生成一个有关作者、图书标识号和每个作者所著图书类型的列表。
USEpubs
SELECTSUBSTRING((RTRIM(a.au_fname)+''+
RTRIM(a.au_lname)+''),1,25)ASName,a.au_id,ta.title_id,
Type=
CASE
WHENSUBSTRING(ta.title_id,1,2)='BU'THEN'Business'
WHENSUBSTRING(ta.title_id,1,2)='MC'THEN'ModernCooking'
WHENSUBSTRING(ta.title_id,1,2)='PC'THEN'PopularComputing'
WHENSUBSTRING(ta.title_id,1,2)='PS'THEN'Psychology'
WHENSUBSTRING(ta.title_id,1,2)='TC'THEN'TraditionalCooking'
END
FROMtitleauthortaJOINauthorsaONta.au_id=a.au_id
下面是结果集:
Name au_id title_idType
---------------------------------------------------------------
JohnsonWhite 172-32-1176PS3333 Psychology
MarjorieGreen 213-46-8915BU1032 Business
MarjorieGreen 213-46-8915BU2075 Business
CherylCarson 238-95-7766PC1035 PopularComputing
MichaelO'Leary 267-41-2394BU1111 Business
MichaelO'Leary 267-41-2394TC7777 TraditionalCooking
DeanStraight 274-80-9391BU7832 Business
AbrahamBennet 409-56-7008BU1032 Business
AnnDull 427-17-2319PC8888 PopularComputing
BurtGringlesby 472-27-2349TC7777 TraditionalCooking
CharleneLocksley 486-29-1786PC9999 PopularComputing
CharleneLocksley 486-29-1786PS7777 Psychology
ReginaldBlotchet-Halls 648-92-1872TC4203 TraditionalCooking
AkikoYokomoto 672-71-3249TC7777 TraditionalCooking
InnesdelCastillo 712-45-1867MC2222 ModernCooking
MichelDeFrance 722-51-5454MC3021 ModernCooking
StearnsMacFeather 724-80-9391BU1111 Business
StearnsMacFeather 724-80-9391PS1372 Psychology
LiviaKarsen 756-30-7391PS1372 Psychology
SylviaPanteley 807-91-6654TC3218 TraditionalCooking
SherylHunter 846-92-7186PC8888 PopularComputing
AnneRinger 899-46-2035MC3021 ModernCooking
AnneRinger 899-46-2035PS2091 Psychology
AlbertRinger 998-72-3567PS2091 Psychology
AlbertRinger 998-72-3567PS2106 Psychology
(25row(s)affected)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SQL中Case的使用方法(上篇)
Case具有两种格式。
简单Case函数和Case搜索函数。
--简单Case函数
CASEsex
WHEN'1'THEN'男'
WHEN'2'THEN'女'
ELSE'其他'END
--Case搜索函数
CASEWHENsex='1'THEN'男'
WHENsex='2'THEN'女'
ELSE'其他'END
这两种方式,可以实现相同的功能。
简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
--比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASEWHENcol_1IN('a','b')THEN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 逻辑 判断