SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行

PIVOT函数,行转列

PIVOT函数的格式如下

PIVOT(<聚合函数>([聚合列值]) FOR [行转列前的列名] IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],.......[行转列后的列名N]))
<聚合函数>就是我们使用的SUM,COUNT,AVG等Sql聚合函数,也就是行转列后计算列的聚合方式。
[聚合列值]要进行聚合的列名
[行转列前的列名]这个就是需要将行转换为列的列名。
[行转列后的列名]这里需要声明将行的值转换为列后的列名,因为转换后的列名其实就是转换前行的值,所以上面格式中的[行转列后的列名1],[行转列后的列名2],[行转列后的列名3],......[行转列后的列名N]其实就是[行转列前的列名]每一行的值。

select * from (select 合同号,库房,项数 from Book) as a
pivot(sum(项数字段) FOR [库房字段] in([晋和],[宇培],[富宝])) as b

UNPIVOT函数,列转行

UNPIVOT函数的格式如下:

UNPIVOT([转换为行的列值在转换后对应的列名] for [转换为行的列名在转换后对应的列名] in ([转换为行的列1],[转换为行的列2],[转换为行的列3],...[转换为行的列N]))
[转换为行的列值在转换后对应的列名]这个是进行列转行的列其数据值在转换为行后的列名称
[转换为行的列名在转换后对应的列名]这个是进行列转行的列其列名在转换为行后的列名称
[转换为行的列]这个是声明哪些列要进行列转行

with PIVOT_Table as
(
select *
from ShoppingCart as C
PIVOT(count(TotalPrice) FOR [Week] IN([1],[2],[3],[4],[5],[6],[7])) AS T
)

select * from PIVOT_Table UNPIVOT([RowCount] for [Week] in ([1],[2],[3],[4],[5],[6],[7])) as T

posted @ 2020-02-24 13:23  zhujie-  阅读(252)  评论(0)    收藏  举报