以往在撰寫報表程式時,時常需要大量的運用子查詢及聚合函數(SUM、AYG、COUNT),SQL寫的又臭又長, 例如計算總訂單量,會這樣寫: SELECTa.SalesOrderID,a.ProductID,a.OrderQty ,(selectsum(b.OrderQty)FROMSales.SalesOrderDetailb wherea.SalesOrderID=b.SalesOrderIDGROUP BY b.SalesOrderID)As'Total' ,(selectavg(b.OrderQty)FROMSales.SalesOrderDetailb wherea.SalesOrderID=b.SalesOrderIDGROUP BY b.SalesOrderID)AS'Avg' ,(selectCOUNT(b.OrderQty)FROMSales.SalesOrderDetailb wherea.SalesOrderID=b.SalesOrderIDGROUP BY b.SalesOrderID)AS'Count' ,(selectmin(b.OrderQty)FROMSales.SalesOrderDetailb wherea.SalesOrderID=b.SalesOrderIDGROUP BY b.SalesOrderID)AS'Min' FROMSales.SalesOrderDetailaFROMa.SalesOrderIDin(43659,43664) GROUP BY a.SalesOrderID,a.ProductID,a.OrderQty 無意中在微軟的技術網站裡發現這篇文章,上述範例用OVER子句去寫,更簡潔了,並且能提高效率。 以上範例如用OVER子句來寫會是這樣 :