优选主流主机商
任何主机均需规范使用

SQL技巧揭秘:轻松掌握行转列与列转行的实用方法

前言

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

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

行转列

假如我们有下表:

1 2 3 4 5 select * from student pivot (   sum (score) for subject in (语文, 数学, 英语) )

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

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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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

1 2 3 4 5 select * from student1 unpivot (    score for subject in ( "语文" , "数学" , "英语" ) )

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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

未经允许不得转载:搬瓦工中文网 » SQL技巧揭秘:轻松掌握行转列与列转行的实用方法