T-SQL查询进阶:基于列的逻辑表达式2015-02-08引言T-SQL不仅仅是一个用于查询数据库的语言,还是一个可以对数据进行操作的语言。基于列的CASE表达式就是其中一种,不像其他查询语句可以互相替代(比如用子查询实现的查询也可以使用Join实现),CASE表达式在控制基于列的逻辑大部分是无法替代的。下面文中会详细讲解CASE表达式。
简介
基于列的逻辑表达式,其实就是CASE表达式.可以用在SELECT,UPDATE,DELETE,SET以及IN,WHERE,ORDER BY和HAVING子句之后。由于这里讲的是T-SQL查询,所以只说到CASE表达式在SELECT子句和ORDER BY子句中的使用。CASE表达式实现的功能类似于编程语言中的IF…THEN…ELSE逻辑。只是CASE表达式在T-SQL中并不能控制T-SQL程序的流程,只是作为基于列的逻辑使用.一个简单的CASE表达式如下:我已经知道员工ID对应的姓名,我想获得员工ID,并将员工ID以姓名的方式展现出来,我不知道的员工ID则显示UNKNOW:
SELECTTOP 4 CASE EmployeeIDWHEN 1 THEN "CareySon"WHEN 2 THEN "Jack"WHEN 3 THEN "Tom"ELSE "UNKNOW"ENDAS NameList,EmployeeIDFROM [AdventureWorks].[HumanResources].[Employee]ORDERBY EmployeeID
显示结果如下:

上面代码中,CASE后面跟选择的列名,后面的WHEN所取得值都为EmployeeID这一列,THEN后面的值为对应前面WHEN后面列中,实际在结果中显示的值。CASE表达式实际情况可以分为两种:CASE简单表达式(CASE Simple Expression):将某个表达式与一组简单表达式进行比较以确定结果。CASE 搜索表达式(CASE Searched Expression):计算一组布尔表达式以确定结果。下面会按照这两种CASE表达式来阐述
CASE简单表达式(CASE Simple Expression)
在CASE简单表达式中,整个表达式只会取一列的值做相应的判断,上面那个查询例子就是一个CASE简单表达式,可以用下图表示:

CASE表达式也可以用这样的写法:
SELECTTOP 4 NameList=CASE EmployeeIDWHEN 1 THEN "CareySon"WHEN 2 THEN "Jack"WHEN 3 THEN "Tom"ELSE "UNKNOW"END,EmployeeIDFROM [AdventureWorks].[HumanResources].[Employee]ORDERBY EmployeeID
上面代码和前面代码所达到的效果是一模一样的,从这个代码可以看出,CASE表达式的结果实际上只局限在一列当中,这也是为什么CASE表达式是“基于列的逻辑表达式”因为CASE表达式的值只局限在一列当中,所以THEN后面的值数据类型必须相同,或者兼容,否则就会报错。在上面语句中,还有一个可选的“ELSE”语句,这个语句可以省略,但最好的做法是保留ELSE,否则不在匹配值范围内的所有值都会为“NULL”。