SQL Server数据库中,PIVOT在帮助中这样描述滴:可以使用 PIVOT 和UNPIVOT 关系运算符将表值表达式更改为另一个表。PIVOT 通过将表达式某一列中的***值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。
测试用的数据及表结构:
CREATETABLEShoppingCart( [Week]INTNOTNULL, [TotalPrice]DECIMALDEFAULT(0)NOTNULL ) INSERTINTOShoppingCart([Week],[TotalPrice]) SELECT1,10UNIONALL SELECT2,20UNIONALL SELECT3,30UNIONALL SELECT4,40UNIONALL SELECT5,50UNIONALL SELECT6,60UNIONALL SELECT7,70 SELECT*FROMShoppingCart
输出结果:
来看下PIVOT怎么把行变列:
SELECT'TotalPrice'AS[Week],[1],[2],[3],[4],[5],[6],[7] FROMShoppingCartPIVOT(SUM(TotalPrice)FOR[Week]IN([1],[2],[3],[4],[5],[6],[7]))AST
输出结果:
可以看出来,转换完成了,就这么个功能。再看一个UNPIVOT函数,与上述功能相反,把列转成行。我们直接使用WITH关键字把上述PIVOT查询当成源表,然后再使用UNPIVOT关键把它旋转回原来的模样,SQL脚本及结果如下:
WITHPAS( SELECT'TotalPrice'AS[Week],[1],[2],[3],[4],[5],[6],[7] FROMShoppingCartPIVOT(SUM(TotalPrice)FOR[Week]IN([1],[2],[3],[4],[5],[6],[7])) AST ) SELECT [WeekDay]AS[Week], [WeekPrice]AS[TotalPrice] FROMP UNPIVOT( [WeekPrice]FOR[WeekDay]IN([1],[2],[3],[4],[5],[6],[7]) )ASFOO
关于SQL Server数据库PIVOT函数的使用的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!
【编辑推荐】
- 初学SQL Server存储过程调用的代码示例SQL Server 2005数据库排序的SQL实例解析Oracle数据库日志查看工具LogMiner的使用详解SQL Server数据库对XML节点和XML块的操作实例解析SQL Server 2008 MDX学习笔记之结果集Sets使用技巧