A. 使用带有 CASE 简单表达式的 SELECT 语句
SELECT 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, Name FROM Production.Product ORDER BY ProductNumber;
case语句用于简单表达式时,格式为
col_name=
CASE COL_NAME1
WHEN VALUE1 THEN VALUE1'
WHEN VALUE2 THEN VALUE2'
...
ELSE VALUEn
END
FROM TABLE_NAME;
只能对表格中的某一列的值进行判断,从而来决定另一列的值。换句话说,WHEN后面的VALUE是个简单的表达式,简单表达式不涉及比较,而仅仅是对某一列中的值的等同性检查,即和VALUEn相等即完成一次判断。
B. 使用带有 CASE 搜索表达式的 SELECT 语句
SELECT 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' END FROM Production.Product ORDER BY ProductNumber ; 可以对表格中的多列进行判断,从而决定单列的值!语句格式与简单表达式不同:
COL_NAME=
CASE
WHEN 表达式1 THEN VALUE1
WHEN 表达式2 THEN VALUE2
...
ELSE VALUEn
END
FROM TABLE_NAME;
由上,可知WHEN后面的表达式有可能涉及多列的比较,要使用and来连接,与简单表达式的区别在于简单表达式不涉及到比较,仅仅是等同性检查。
------------------------------------------------------------------------------------------
case表达式是结果基于某一列的(即上文中提到的COL_NAME=...),因为CASE表达式的值只局限在一列当中,所以THEN后面的值数据类型必须相同,或者兼容,否则就会报错。
在上面语句中,还有一个可选的“ELSE”语句,这个语句可以省略,但最好的做法是保留ELSE,否则不在匹配值范围内的所有值都会为“NULL”
未完待续。。。