首页 > 代码库 > 随笔003:开窗函数

随笔003:开窗函数

当需提取数据的汇总数或者排序数,但是又要显示非分组字段的字段时,可用统计函数\排序函数+OVER()【即开窗函数】

例如:获取客户的所有订单同时显示客户的统计总订单数,不用开窗函数则脚本如下:

SELECT [SalesOrderID]      ,[OrderDate]      ,[CustomerID]      ,[SalesPersonID]           ,[SubTotal]      ,[TaxAmt]      ,(SELECT COUNT(*)FROM [AdventureWorks2008R2].[Sales].[SalesOrderHeader] B         WHERE A.CustomerID = B.CustomerID) 客户总单数  FROM [AdventureWorks2008R2].[Sales].[SalesOrderHeader] A  order by CustomerID,SalesOrderID
View Code

若用开窗函数则脚本如下:

SELECT [SalesOrderID]      ,[OrderDate]      ,[CustomerID]      ,[SalesPersonID]           ,[SubTotal]      ,[TaxAmt]      , COUNT(*) over(partition by customerId) 客户总单数  FROM [AdventureWorks2008R2].[Sales].[SalesOrderHeader] A  order by CustomerID,SalesOrderID
View Code

两者结果

用开窗函数脚本相对要简单些,也容易看明白