随笔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

两者结果

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

附:用over开窗函数时聚合函数里不可使用distinct

posted on 2014-08-15 20:47  nvrrgup  阅读(190)  评论(0)    收藏  举报

导航