数据库教程:SQL行转列,列转行

SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: 通过上面 SQL 语句即可得到下面的结果 PIVOT 后跟一个聚合函数来拿到结果,FOR 后面跟的科目是我们要转换的列,这样的话科 …


sql 行转列,列转行

行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。

行列转换就是如下图所示两种展示形式的互相转换

SQL行转列,列转行

行转列

假如我们有下表:

SQL行转列,列转行

select * from student pivot (     sum(score) for subject in (语文, 数学, 英语) )

通过上面 sql 语句即可得到下面的结果

SQL行转列,列转行

pivot 后跟一个聚合函数来拿到结果,for 后面跟的科目是我们要转换的列,这样的话科目中的语文、数学、英语就就被转换为列。in 后面跟的就是具体的科目值。

当然我们也可以用 case when 得到同样的结果,就是写起来麻烦一点。

select name,   max(   case     when subject='语文'     then score     else 0   end) as "语文",   max(   case     when subject='数学'     then score     else 0   end) as "数学",   max(   case     when subject='英语'     then score     else 0   end) as "英语" from student group by name

使用 case when 可以得到和 pivot 同样的结果,没有 pivot 简单直观。

列转行

假设我们有下表 student1

SQL行转列,列转行

select * from student1 unpivot (     score for subject in ("语文","数学","英语") )

通过 unpivot 即可得到如下结果:

SQL行转列,列转行

我们也可以使用下面方法得到同样结果

需要了解更多数据库技术:SQL行转列,列转行,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

select     name,     '语文' as subject ,     max("语文") as score from student1 group by name union select     name,     '数学' as subject ,     max("数学") as score from student1 group by name union select     name,     '英语' as subject ,     max("英语") as score from student1 group by name 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/798060.html

(0)
上一篇 2021年9月11日
下一篇 2021年9月11日

精彩推荐