T-SQL 基于列的逻辑表达式 (CASE)
测试数据:
CREATE TABLE STU( ID INT NOT NULL PRIMARY KEY IDENTITY(1,1), NAME NVARCHAR(20), SEX INT, REMARK NVARCHAR(100) ) GO INSERT INTO STU VALUES('刘奇',1,'好') INSERT INTO STU VALUES('刘红',0,'普通') INSERT INTO STU VALUES('张丽',0,'普通') INSERT INTO STU VALUES('刘院长',1,'好')
基本用法:
因为CASE表达式的值只局限在一列当中,所以THEN后面的值数据类型必须相同
--写法一 SELECT ID,NAME,CASE SEX WHEN 1 THEN '男' WHEN 0 THEN '女' ELSE 'QITA' END AS 性别 FROM STU GO --写法二 SELECT ID,NAME,性别=CASE --注意这里的CASE后面不跟任何东西了 WHEN SEX=1 THEN '男的' --当然Sex你可以换成任意其他列 WHEN SEX=0 THEN '女的' ELSE 'QITA' END FROM STU
结果:
多组合条件查询:
SELECT ID,NAME,性别=CASE WHEN SEX=1 AND ID=1 THEN '1号男嘉宾' WHEN SEX=0 AND ID=2 THEN '2号女嘉宾' WHEN SEX=1 THEN '男的' WHEN SEX=0 THEN '女的' ELSE 'QITA' END FROM STU /* 结果: ID NAME 性别 1 刘奇 1号男嘉宾 2 刘红 2号女嘉宾 3 张丽 女的 4 刘院长 男的 */
在实际开发中最常用的可能是这段代码:
SELECT Id,Name, CASE WHEN Score > 90 THEN '优秀' WHEN Score > 80 THEN '良好' WHEN Score > 70 THEN '中等' WHEN Score > 60 THEN '及格' ELSE '不及格' END AS 分数 FROM Score
这里要注意WHEN…THEN是以先后顺序出现,当第一个WHEN后面的表达式为FALSE时,则会去看第二个WHEN后的表达式,依次类推。当第一个WHEN后的表达式为TRUE时,则取第一个THEN后面的值,即使第二个WHEN表达式也为TRUE。
CASE表达式在ORDER BY中的使用
CASE表达式在ORDER BY中可以将排序结果分类,可以使符合一定条件则升序,符合另外一定条件则降序
SELECT ID,NAME,SEX FROM STU ORDER BY CASE WHEN SEX=0 THEN ID END DESC, --性别为女的 根据ID 升序 CASE WHEN SEX=1 THEN ID END ASC -- 性别为男的 根据ID 降序 /* ID NAME SEX 3 张丽 0 2 刘红 0 1 刘奇 1 4 刘院长 1 */