设为首页 加入收藏

TOP

CASE关键字的简单用法分享
2018-05-23 09:17:49 】 浏览:104
Tags:CASE 关键字 简单 用法 分享

今天给大家说下工作中经常使用的一个关键字:CASE。说起CASE还得从我刚进入第一家公司的面试说起。

第一家公司是我第一次面试公司,当时还是有点小紧张。在和HR沟通之后,就开始做三道面试题,给我影响深刻的是第一道和第三道都是用的CASE,因为之前对CASE比较了解,笔试也就顺利通过了。

CASE是一个标量表达式,它是基于条件逻辑返回一个值。只能用在标量表达式中(如SELECT,WHERE,HAVING和ORDER BY子句等)

CASE具有两种格式:简单CASE函数和CASE搜索函数。

--简单CASE函数

CASE sex

WHEN '1' THEN '男'

WHEN '2' THEN '女'

ELSE '其他' END

--CASE搜索函数

CASE WHEN sex = '1' THEN '男'

WHEN sex = '2' THEN '女'

ELSE '其他' END

这里我想说的是CASE的独到用处,就是行转列功能。看如下的一个示例:

IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb

GO

CREATE TABLE tb(姓名 NVARCHAR(10),课程 NVARCHAR(10),分数 INT)

INSERT INTO?tb VALUES (N'张三',N'语文',74)

INSERT INTO?tb VALUES (N'张三',N'数学',83)

INSERT INTO?tb VALUES (N'张三',N'物理',93)

INSERT INTO?tb VALUES (N'李四',N'语文',74)

INSERT INTO?VALUES (N'李四',N'数学',84)

INSERT INTO?VALUES (N'李四',N'物理',94)

GO

SELECT * FROM tb

GO

执行完成后的结果如图:

\

开始进行行列转换:

SELECT 姓名,

MAX(CASE 课程 WHEN N'语文' THEN 分数 ELSE 0 END) 语文,

MAX(CASE 课程 WHEN N'数学' THEN 分数 ELSE 0 END) 数学,

MAX(CASE 课程 WHEN N'物理' THEN 分数 ELSE 0 END) 物理

FROM tb

GROUP BY 姓名

执行结果如下:

\

这样就很好的完成了行列的转换了,当然这只是一个比较简单的例子,SQL Server 2005版之后有单独的行列转换功能PIOVT,以下查询同样可以得到上面的结果:

SELECT * FROM tb PIVOT( MAX(分数) FOR 课程 IN (语文,数学,物理))a

这个功能特别适合那时候业务系的一些数据的提取,我在工作上用的比较多,这里分享给大家。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇php操作mysql,1分钟内插入百万数.. 下一篇Redis的使用命令参考讲解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目