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
end
有兴趣的小伙伴可以关注“SQL数据库笔记”公众号,一起学习吧!
最后修改时间:2019-12-16 10:02:46
文章转载自SQL数据库笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。