OVER Yan Tümcesi (Transact-SQL)
bölümleme ve ilişkili pencere işlev uygulanmadan önce satır kümesi sipariş belirler.
İçin geçerlidir:
Pencere işlevleri sıralaması
Toplam pencere işlevleri.Daha fazla bilgi için, bkz. Toplama İşlevleri (Transact-SQL).
Sözdizimi
Ranking Window Functions
< OVER_CLAUSE > :: =
OVER ( [ PARTITION BY value_expression , ... [ n ] ]
<ORDER BY_Clause> )
Aggregate Window Functions
< OVER_CLAUSE > :: =
OVER ( [ PARTITION BY value_expression , ... [ n ] ] )
Bağımsız değişkenler
BÖLÜMÜ
sonuç kümesi bölümlere ayırır.işlev penceresi her bölüm için ayrı ayrı uygulanır ve hesaplaması her bölüm için yeniden başlatır.value_expression
Karşılık yan tümce gelen tarafından üretilen satır kümesi olarak bölümlenmiş sütun belirtir.value_expressionyalnızca from yan tümcetarafından kullanılabilir sütunlara başvurabilir.value_expressionifadeler veya diğer adlar listesinde başvuruda bulunamaz.value_expressionbirifade sütun, skaleralt sorgu, skalerişlevveya kullanıcı tanımlı değişken olabilir.<order by yan tümcesi>
Sıralaması uygulanacağı sırayı belirtir penceresi işlev.Daha fazla bilgi için, bkz. order by yan tümcesi (Transact-SQL).Önemli Bir derecelendirme bağlamında kullanıldığında penceresi işlev, <order by Clause> yalnızca from yan tümcetarafından kullanılabilir sütunlara başvurabilir.Adının konumunu veya select listesindeki bir sütun diğer ad temsil eden bir tamsayı belirtilemez.<order by Clause> ile toplu pencere işlevleri kullanılamaz.
Açıklamalar
Pencere işlevleri ISO SQL standardında tanımlanır.SQL ServerSıralama ve toplu pencere işlevleri sağlar.Bir pencereyi bir kullanıcı tanımlı küme satır kümesidir.Pencere işlev penceresinden türetilmiş bir sonuç kümesi her satır için bir değer hesaplar.
Birden fazla sıralama veya toplu penceresi işlev tek bir tek bir sorguda kullanılan from yan tümce.Ancak, üzerinde yan tümce her işlev için farklı olabilir bölümleme ve ayrıca sipariş.ÜZERİNDE yan tümce ile sağlama toplu işlevkullanılamaz.
Örnekler
A.Satır_num işlevüzerinde yan tümce kullanarak
Her sıralama işlevSatır_num, dense_rank, rank, NTILE üzerinde yan tümcekullanır.Aşağıdaki örnekler kullanarak OVER yan tümce ile ROW_NUMBER.
USE AdventureWorks2008R2;
GO
SELECT p.FirstName, p.LastName
,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Person p
ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address a
ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
GO
B.toplu işlevleri ile üzerinde yan tümce kullanarak
Aşağıdaki örnekler kullanarak toplu işlevleri ileOVERyan tümce . Bu örnekte kullanarak OVER yan tümce alt sorgu kullanmaktan daha verimlidir.
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
Sonuç kümesi buradadır.
SalesOrderID |
ProductID |
OrderQty |
Toplam |
Avg |
Count |
Min |
Max |
---|---|---|---|---|---|---|---|
43659 |
776 |
1 |
26 |
2 |
12 |
1 |
6 |
43659 |
777 |
3 |
26 |
2 |
12 |
1 |
6 |
43659 |
778 |
1 |
26 |
2 |
12 |
1 |
6 |
43659 |
771 |
1 |
26 |
2 |
12 |
1 |
6 |
43659 |
772 |
1 |
26 |
2 |
12 |
1 |
6 |
43659 |
773 |
2 |
26 |
2 |
12 |
1 |
6 |
43659 |
774 |
1 |
26 |
2 |
12 |
1 |
6 |
43659 |
714 |
3 |
26 |
2 |
12 |
1 |
6 |
43659 |
716 |
1 |
26 |
2 |
12 |
1 |
6 |
43659 |
709 |
6 |
26 |
2 |
12 |
1 |
6 |
43659 |
712 |
2 |
26 |
2 |
12 |
1 |
6 |
43659 |
711 |
4 |
26 |
2 |
12 |
1 |
6 |
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 |
Aşağıdaki örnekler kullanarak OVER yan tümce toplu işlev hesaplanmış bir değer.
USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, ProductID, OrderQty
,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total'
,CAST(1. * OrderQty / SUM(OrderQty) OVER(PARTITION BY SalesOrderID)
*100 AS DECIMAL(5,2))AS 'Percent by ProductID'
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN(43659,43664);
GO
Sonuç kümesi buradadır.Aggregates tarafından hesaplanır dikkat edin SalesOrderID ve Percent by ProductID her her satır için hesaplanan SalesOrderID.
SalesOrderID |
ProductID |
OrderQty |
Toplam |
ProductID yüzde |
---|---|---|---|---|
43659 |
776 |
1 |
26 |
3.85 |
43659 |
777 |
3 |
26 |
11.54 |
43659 |
778 |
1 |
26 |
3.85 |
43659 |
771 |
1 |
26 |
3.85 |
43659 |
772 |
1 |
26 |
3.85 |
43659 |
773 |
2 |
26 |
7.69 |
43659 |
774 |
1 |
26 |
3.85 |
43659 |
714 |
3 |
26 |
11.54 |
43659 |
716 |
1 |
26 |
3.85 |
43659 |
709 |
6 |
26 |
23.08 |
43659 |
712 |
2 |
26 |
7.69 |
43659 |
711 |
4 |
26 |
15.38 |
43664 |
772 |
1 |
14 |
7.14 |
43664 |
775 |
4 |
14 |
28.57 |
43664 |
714 |
1 |
14 |
7.14 |
43664 |
716 |
1 |
14 |
7.14 |
43664 |
777 |
2 |
14 |
14.29 |
43664 |
771 |
3 |
14 |
21.43 |
43664 |
773 |
1 |
14 |
7.14 |
43664 |
778 |
1 |
14 |
7.14 |