条件处理可以根据一个或者一组表达式的值来返同结果。
CASE函数用于根据一个表达式的值返回结果。它常用于将代码转换为描述性的值或者计算多个条件来返回一个值(例如,“如果行是2008年的并且小于或等于当前的季度,则返回销售总数”)。
IF…ELSE结构计算一个布尔表达式,如果足TRUE则执行一个T-SQL语句或批处理。这个命令有很多用途,使用它可以根据条件返回结果集、更新数据或根据一个或多个搜索条件执行存储过程。
1.使用CASE来计算单个输入表达式
CASE函数用于根据一个表达式的值返回结果。语法:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
参数 | 描述 |
input_expression | input_expression 是任何有效的表达式 。 |
when_expression | 要与 input_expression 进行比较的简单表达式 。 when_expression 是任何有效的表达式 。 input_expression 及每个 when_expression 的数据类型必须相同或必须是隐式转换的数据类型 。 |
result_expression | 当 input_expression = when_expression 的计算结果为 TRUE 时,或 Boolean_expression 的计算结果为 TRUE 时返回的表达式 。 |
示例:
USE AdventureWorks
GO
--根据部门决定会议室
SELECT DepartmentID,
Name,
GroupName,
CASE GroupName
WHEN 'Research and Development' THEN 'Room A'
WHEN 'Sales and Marketing' THEN 'Room B'
WHEN 'Manufacturing' THEN 'Room C'
ELSE 'Room D'
END ConferenceRoom
FROM HumanResources.Department
2.使用CASE来计算布尔表达式
CASE提供了另外一种语法,它不使用初始的输入表达式,而是使用一个或多个布尔表达式,当表达式计算为TRUE的时候返回一个结果表达式。语法如下:
CASE
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
和前面的技巧相比,语法中另外的参数是要计算的表达式bo01ean_expression。每一个WHEN都计算一个布尔表达式而不是输入表达式,如果TRUE则返回结果表达式。这种形式的CASE允许额外的表达式,而不是仅仅计算一个输入表达式的值。
如果没有表达式计算为TRUE,则返回ELSE子句的resuit_expression,或者如果没有指定ELSE子句的话就返回NULL值。如果一行与多个布尔表达式匹配,那么第一个计算为TRUE的布尔表达式决定了结果表达式。
示例:
USE AdventureWorks
GO
SELECT DepartmentID,
Name,
CASE
WHEN Name='Research and DEvelopment' THEN 'Room A'
WHEN (Name='Sales and Marketing' OR DepartmentID=10) THEN 'Room B'
WHEN Name LIKE 'T%' THEN 'Room C'
ELSE 'Room D'
END ConferenceRoom
FROM HumanResources.Department
ORDER BY ConferenceRoom
3.使用IF…ELSE
IF…ELSE计算一个布尔表达式,如果是TRUE则执行一个T-SQL语句或批处理。
IF Boolean_expression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
如果布尔表达式计算为FALSE,则调用ELSE子句,执行ELSE后的T-SQL语句或批处理。
示例:
USE AdventureWorks
GO
DECLARE @QuerySelector int
SET @QuerySelector=3
IF @QuerySelector=1
BEGIN
SELECT TOP 3
ProductID,Name,Color
FROM Production.Product
WHERE Color='Silver'
ORDER BY Name
END
ELSE
BEGIN
SELECT TOP 3
ProductID,Name,Color
FROM Production.Product
WHERE Color='Black'
ORDER BY Name
END