博客 > SQL知识:SQL行转列
浏览量:809次评论:0次
作者:锐成网络整理时间:2024-05-21 14:09:12
SQL是一种强大的数据库查询语言,它允许我们对数据库中的数据进行高效的管理和操作。而SQL行转列是SQL技术中的一项重要应用,它可以将数据库表中的行数据转换为列数据,极大地方便了数据的处理和分析。本文将详细讲解SQL知识之SQL行转列,以供参考。
CASE函数的类型
CASE具有两种格式,简单CASE函数和CASE搜索函数。这两种方式,大部分情况下可以实现相同的功能。
简单CASE函数
语法
CASE column
WHENTHEN value
WHENTHEN value
......
ELSE value END
示例
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
CASE搜索函数
语法
CASE WHEN[,] THEN value
WHEN[,] THEN value
......
ELSE value END
示例
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
简单CASE 函数重在简洁,但是它只适用于这种单字段的单值比较,而CASE 搜索函数的优点在于适用于所有比较(包括多值比较)的情况。
例如
CASE WHEN sex = '1' AND age>18 THEN '成年男性'
WHEN sex = '2' AND age>18 THEN '成年女性'
ELSE '其他' END
注意:CASE函数只返回第一个符合条件的值,剩下的CASE部分将会被自动忽略。比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASE WHEN Type IN ('a','b') THEN '第一类'
WHEN Type IN ('a') THEN '第二类'
ELSE '其他类' END
行转列
CASE用的比较广泛的功能就是行转列,就是将记录行里的数据按条件转换成具体的列。看如下的一个示例:
IF OBJECT_ID('Score') IS NOT NULL DROP TABLE Score
GO
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)
GO
SELECT * FROM Score
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 Score
GROUP BY 姓名
执行结果如下:
行转列新方法
这样就很好的完成了行列的转换了,当然这只是一个比较简单的例子,SQL Server 2005版之后有单独的行列转换功能PIOVT,以下查询同样可以得到上面的结果:
SELECT * FROM Score
PIVOT( MAX(分数) FOR 课程 IN (语文,数学,物理)) A
重要声明:本文来自SQL数据库开发,经授权转载,版权归原作者所有,不代表锐成观点,转载的目的在于传递更多知识和信息。
相关文章推荐
2024-08-20 17:58:16
2024-08-19 17:49:29
2024-08-19 10:23:28
2024-08-16 17:06:33
2024-08-15 17:22:55
热门工具
标签选择
阅读排行
我的评论
还未登录?点击登录