领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

SQL学习:SQL CASE 行转列新用法,太实用了

nixiaole 2024-12-19 15:38:13 知识剖析 11 ℃

今天给大家讲解sql case行转列的用法,就是将记录行里的数据按条件转换成具体的列。如下面的一个示例:

演示数据准备:

CREATE TABLE Score(姓名 NVARCHAR(10),课程 NVARCHAR(10),分数 INT)
INSERT INTO Score VALUES (N'张三',N'语文',74)
INSERT INTO Score VALUES (N'张三',N'数学',83)
INSERT INTO Score VALUES (N'张三',N'物理',93)
INSERT INTO Score VALUES (N'李四',N'语文',74)
INSERT INTO Score VALUES (N'李四',N'数学',84)
INSERT INTO Score VALUES (N'李四',N'物理',94)

执行完语句如下图:

我们想要把上图数据转为下图显示:

可以通过执行如下语句:

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 Score
GROUP BY 姓名

这样就很好的完成了行列的转换了,当然这只是一个比较简单的例子,SQL Server 2005 版

之后有单独的行列转换功能 PIOVT,以下查询同样可以得到上面的结果:

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

其中 FOR 后面的是我们即将进行行转列的列部分,IN 里面的是我们行转列之后的列,MAX 是聚合 IN 里面的内容,也可以是其他聚合函数:SUM,MIN,COUNT 等,PIVOT 写法比较固定,就是 CASE WHEN 的一种简略的写法。

CASE 是我们在日常工作中使用非常频繁的一个功能,可以很好地将我们需要的输出数据据单独地显示在一列里面,有助于对数据有个比较清晰的掌握。与 Excel 的转置有点类似,但是其功能的多样性又比 Excel 更强一点。

你学会了吗,关注我,一起学SQL。

Tags:

最近发表
标签列表