Sql server中的Over子句的应用

 

MSDN中看到的样例代码,放在这里,以便查看

原文地址:http://msdn.microsoft.com/zh-cn/library/ms189461.aspx

 

 

A。将 OVER 子句与 ROW_NUMBER 函数结合使用

每个排名函数(ROW_NUMBER、DENSE_RANK、RANK、NTILE)都使用 OVER 子句。以下示例显示了将 OVER 子句与 ROW_NUMBER 结合使用。

 

 

SELECT                        

            companyname,                        

            invoicenumber,                 

            customernumber,                  

            ROW_NUMBER() OVER(PARTITION BY companyname,invoicenumber,customernu= mber                         

                   ORDER BY companyname,invoice= number,customernumber) AS rownum                

        FROM @Invoice= ListMaster  

 

B. 将 OVER 子句与聚合函数结合使用

以下示例显示了将 OVER 子句与聚合函数结合使用。在此示例中,使用 OVER 子句比使用子查询的效率高。

USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, ProductID, OrderQty
    ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total'
    ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg'
    ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count'
    ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min'
    ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max'
FROM Sales.SalesOrderDetail 
WHERE SalesOrderID IN(43659,43664);
GO

下面是结果集:

SalesOrderID

ProductID

OrderQty

Total

Avg

Count

Min

Max

43664

772

1

14

1

8

1

4

43664

775

4

14

1

8

1

4

43664

714

1

14

1

8

1

4

43664

716

1

14

1

8

1

4

43664

777

2

14

1

8

1

4

43664

771

3

14

1

8

1

4

43664

773

1

14

1

8

1

4

43664

778

1

14

1

8

1

4

 

 

你可能感兴趣的:(Sql server中的Over子句的应用)