我们在写Sql语句的时候没经常会遇到将查询结果行转列,列转行的需求,拼接sql字符串,然后使用sp_executesql执行sql字符串是比较常规的一种做法。但是这样做实现起来非常复杂,而在SqlServer2005中我们有了PIVOT函数可以快速实现行转列和列转行的操作。
PIVOT函数的格式如下
PIVOT(<聚合函数>([集合列值]) FOR [行转列前的列名] IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],.......[行转列后的列名N]))
下面我们来看一个例子有一张表名为[ShoppingCart]有三列[Week],[TotalPrice],[GroupId],数据如下所示:
现在我们是用PIVOT函数将列[WEEK]的行值转换为列,并使用聚合函数Count(1)来统计每一个Week列在转换前有多少行数据,语句如下所示:
select * from ShoppingCart as C PIVOT(count(TotalPrice) FOR [Week] IN([1],[2],[3],[4],[5],[6],[7])) AS T
查询结果如下:
我们可以看到PIVOT函数成功地将[ShoppingCart]表列[Week]的行值转换为了七列,并且每一列统计转换前的行数为1,这符合我们的预期结果。那么根据我们前面定义的PIVOT函数转换格式,在本例中我们有如下公式对应值:
SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行
原文:http://www.cnblogs.com/OpenCoder/p/6668882.html