Over子句的应用

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;GOSELECT 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)