PIVOT內置函數實現行轉列


  PIVOT用於將列值旋轉為列名(即行轉列),PIVOT的一般語法是:PIVOT(聚合函數(列) FOR 列 in (…) )AS P

完整語法:

table_source

PIVOT(

聚合函數(value_column)

FOR pivot_column

IN(<column_list>)

)

  UNPIVOT用於將列明轉為列值(即列轉行),可以用UNION來實現

完整語法:

table_source

UNPIVOT(

value_column

FOR pivot_column

IN(<column_list>)

)

 

案例:

姓名         課程         分數
---------- ---------- -----------
張三         語文         74
張三         數學         83
張三         物理         93
李四         語文         74
李四         數學         84
李四         物理         94

 

根據姓名統計這個人的三門成績,即:姓名   語文   數學  物理

首先看看使用case when end結構的時候:

select 姓名,
 max(case 課程 when '語文' then 分數 else 0 end)語文,
 max(case 課程 when '數學'then 分數 else 0 end)數學,
 max(case 課程 when '物理'then 分數 else 0 end)物理
from tb
group by 姓名

--------------------------------結果------------------------------------------------------------------------------------

姓名         語文          數學          物理
---------- ----------- ----------- -----------
李四         74          84          94
張三         74          83          93

 

這個結果就是我們想要的,然后再看看使用pivot:

select * from tb pivot(max(分數) for 課程 in (語文,數學,物理))a

--------------------------------結果------------------------------------------------------------------------------------

姓名         語文          數學          物理
---------- ----------- ----------- -----------
李四         74          84          94
張三         74          83          93


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM