分享

sql server 2005 T-SQL CASE (Transact-SQL) - 曹...

 doctorzhou 2010-09-13
 
计算条件列表并返回多个可能结果表达式之一。
CASE 具有两种格式:
简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。
CASE 搜索函数计算一组布尔表达式以确定结果。
两种格式都支持可选的 ELSE 参数。
 Transact-SQL 语法约定
 语法
Simple CASE function: CASE input_expression      WHEN when_expression THEN result_expression     [ ...n ]      [     ELSE else_result_expression      ] END Searched CASE function:CASE     WHEN Boolean_expression THEN result_expression     [ ...n ]      [     ELSE else_result_expression      ] END 参数
input_expression
使用简单 CASE 格式时所计算的表达式。input_expression 是任意有效的表达式。
WHEN when_expression
使用简单 CASE 格式时要与 input_expression 进行比较的简单表达式。when_expression 是任意有效的表达式。input_expression 及每个 when_expression 的数据类型必须相同或必须是隐式转换的数据类型。
n
占位符,表明可以使用多个 WHEN when_expression THEN result_expression 子句或多个 WHEN Boolean_expression THEN result_expression 子句。
THEN result_expression
当 input_expression = when_expression 计算结果为 TRUE,或者 Boolean_expression 计算结果为 TRUE 时返回的表达式。result expression 是任意有效的表达式。
ELSE else_result_expression
比较运算计算结果不为 TRUE 时返回的表达式。如果忽略此参数且比较运算计算结果不为 TRUE,则 CASE 返回 NULL。else_result_expression 是任意有效的表达式。else_result_expression 及任何 result_expression 的数据类型必须相同或必须是隐式转换的数据类型。
WHEN Boolean_expression
使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。
 结果类型
从 result_expressions 和可选 else_result_expression 的类型集中返回优先级最高的类型。有关详细信息,请参阅 数据类型优先级 (Transact-SQL)。
 结果值
简单 CASE 函数:
计算 input_expression,然后按指定顺序对每个 WHEN 子句的 input_expression = when_expression 进行计算。
返回 input_expression = when_expression 的第一个计算结果为 TRUE 的 result_expression。
如果 input_expression = when_expression 计算结果不为 TRUE,则在指定 ELSE 子句的情况下 SQL Server 2005 数据库引擎将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。
CASE 搜索函数:
按指定顺序对每个 WHEN 子句的 Boolean_expression 进行计算。
返回 Boolean_expression 的第一个计算结果为 TRUE 的 result_expression。
如果 Boolean_expression 计算结果不为 TRUE,则在指定 ELSE 子句的情况下 数据库引擎将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。
 示例
A. 使用带有简单 CASE 函数的 SELECT 语句
在 SELECT 语句中,简单 CASE 函数仅检查是否相等,而不进行其他比较。以下示例使用 CASE 函数更改产品系列类别的显示,以使这些类别更易理解。
 复制代码
USE AdventureWorks;GOSELECT   ProductNumber, Category =      CASE ProductLine         WHEN 'R' THEN 'Road'         WHEN 'M' THEN 'Mountain'         WHEN 'T' THEN 'Touring'         WHEN 'S' THEN 'Other sale items'         ELSE 'Not for sale'      END,   NameFROM Production.ProductORDER BY ProductNumber;GOB. 使用带有简单 CASE 函数和 CASE 搜索函数的 SELECT 语句
在 SELECT 语句中,CASE 搜索函数允许根据比较值在结果集内对值进行替换。下面的示例根据产品的价格范围将标价显示为文本注释。
 复制代码
USE AdventureWorks;GOSELECT   ProductNumber, Name, 'Price Range' =       CASE          WHEN ListPrice =  0 THEN 'Mfg item - not for resale'         WHEN ListPrice < 50 THEN 'Under $50'         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'         ELSE 'Over $1000'      ENDFROM Production.ProductORDER BY ProductNumber ;GOC. 使用 CASE 代替 Microsoft Access 中使用的 IIf 函数
CASE 可与 Microsoft Access 中的 IIf 函数提供相似的功能。以下示例显示一个简单查询,它使用 IIf 为名为 db1.ContactInfo 的 Access 表中的 TelephoneInstructions 列提供输出值。
 复制代码
SELECT FirstName, Lastname, TelephoneNumber,      IIf(IsNull(TelephoneInstructions),"Any time",     TelephoneInstructions) AS [When to Contact]FROM db1.ContactInfo 以下示例使用 CASE 为 AdventureWorks 视图中的 TelephoneSpecialInstructions 列提供输出值,该视图名称为 Person.vAdditionalContactInfo。
 复制代码
USE AdventureWorksGOSELECT FirstName, Lastname, TelephoneNumber, 'When to Contact' =      CASE          WHEN TelephoneSpecialInstructions IS NULL THEN 'Any time'          ELSE TelephoneSpecialInstructions     ENDFROM Person.vAdditionalContactInfo 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多