网站首页 > 知识剖析 正文
今天给大家讲解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。
- 上一篇: 零基础入门开始学习SQL Server存储过程
- 下一篇: 零基础入门学习SQL Server数据库表
猜你喜欢
- 2024-12-19 为Navicat正名,Navicat完全使用手册(上)
- 2024-12-19 SQL学习 | 查询之ORDER BY sql order by sum
- 2024-12-19 SQL学习:有了这个语句删除数据中重复数据,超简单
- 2024-12-19 VBA, PQ, Power BI, SQL对财务工作有用吗
- 2024-12-19 初学者程序员要学好.Net,只要学习这几个框架就够了
- 2024-12-19 Python 学习 第17篇:sqlalchemy读写SQL
- 2024-12-19 零基础入门学习SQL Server数据库表
- 2024-12-19 零基础入门开始学习SQL Server存储过程
- 2024-12-19 「C# 数据操作系列」SqlSugar 精华大浓缩
- 2024-12-19 jeecg-boot学习总结及使用心得 jeecgboot开发教程
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)