T-SQL 基于列的逻辑表达式 (CASE)

  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
*/
原文地址:https://www.cnblogs.com/mc67/p/4874982.html