SQL基础之pivot和unpivot的用法
pivot用于行转列,unpivot用于列转行
一、pivot 的语法:
select <non-pivoted column>, --非透视列
[first pivoted column] as <column name>, --透视列
[second pivoted column] as <column name>,
...
[last pivoted column] as <column name>
from table_name
pivot( <aggregation function> value_column)
for pivot_column in (<column_list>) )as <alias for pivot> --别名
--<aggregation function>是聚合函数
-- value_column 要转换为 列值 的列名
-- pivot_column 指定要转换的列
-- column_list 透视列
)
示例:
表的定义如下:
create table [dbo].[DeptKPI](
[MonthName] [nvarchar](10) NULL,
[DeptName] [nvarchar](50) NULL,
[KPIValue] [float] NULL
)
1.普通查询如下:
select * from [dbo].[DeptKPI]
2.使用pivot进行行转列,把月份转换成列:
select * from [dbo].[DeptKPI] pivot ( sum(KPIValue)
for MonthName in( 一月,二月,三月,四月,五月,六月)) as T
3.使用pivot行转列查询二月的数据:
select [DeptName] ,t.二月 from [dbo].[DeptKPI]
pivot ( sum(KPIValue)
for MonthName in( 一月,二月,三月,四月,五月,六月)) as T
二、unpivot 的语法:
select <columns not unpivoted>, --非透视列
[unpivot_column], --透视列
[value_column],
from table_name
unpivot ( [value_column] for [unpivot_column] in ( <column_list> ) )
as <alias for unpivot> --别名
--[value_column] 确定一个列名称来代表不转换的列的数据。
--[unpivot_column] 转换列的名称
--<column_list>: 被转换的列的列名称。
1.普通查询如下:
select *from (select * from [dbo].[DeptKPI] pivot ( sum(KPIValue)
for MonthName in( 一月,二月,三月,四月,五月,六月)) as T) as tablename
2.用unpivot把月份转成行:
select *from (select * from [dbo].[DeptKPI] pivot ( sum(KPIValue)
for MonthName in( 一月,二月,三月,四月,五月,六月)) as T) as tablename
unpivot ( [KPIValue] for MonthName in(一月,二月,三月,四月,五月,六月))as B
如有错误欢迎指正
有兴趣的小伙伴可以关注“SQL数据库笔记”公众号,一起学习吧!