WEB开发网
开发学院数据库MSSQL Server SQL Server2005杂谈(5):将聚合记录集逆时针和顺... 阅读

SQL Server2005杂谈(5):将聚合记录集逆时针和顺时针旋转90度

 2009-02-21 10:22:24 来源:WEB开发网   
核心提示: 当然,要达到这个结果并不困难,SQL Server2005杂谈(5):将聚合记录集逆时针和顺时针旋转90度(2),看如下的SQL语句:select(selectcount(name)from@twherename='abc')asabc,(selectcount(name)

当然,要达到这个结果并不困难,看如下的SQL语句:

select(selectcount(name)from@twherename='abc')asabc,
   (selectcount(name)from@twherename='ttt')asxxx,
   (selectcount(name)from@twherename='xxx')asttt

上面的SQL语句会出输出如图3的查询结果。但这里有个问题,上面的SQL语句是枚举了name列所有可能的值,在本例中只有三个值('abc','ttt','xxx'),这非常好枚举,但如果有很多值,SQL语句会变得非常长,非常不利于编写。当然,可以通过编程的方式自动生成,但最终结果仍然会生成很长的SQL语句。

为了解决这个问题,在SQL Server2005中提供了一个pivot函数,该函数可以很容易地输出如图3所示的记录集,如下面的SQL语句所示:

select*from@tpivot(count(name)fornamein([abc],[ttt],[xxx]))

在执行上面的SQL语句同样可以获得图3所示的查询结果。实际上,pivot函数也起到了分组的作用。在使用pivot函数时应注意如下几点:

1.pivot函数需要指定聚合函数,如count、sum等,for关键字和聚合函数都要使用需要聚合的字段名,在本例中是name。

2.in关键字负责指定每组需要聚合的值,用[...]将这些值括起来。实际上,这些值也相当于我们第一种聚合方法中的where条件,例如,where name='abc'、where name='ttt',当然,这些值也是输出记录集的列名。

Tags:SQL Server 杂谈

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接