yan tümce (Transact-SQL)
bölümleme ve ilişkili pencere işlev uygulanmadan önce satır kümesi kümesi sırası belirler.
Uygulanacağı yer:
Pencere işlevleri derecelendirmesi
toplamak penceresinde işlevler.Daha fazla bilgi için bkz:toplamak işlevleri (Transact-SQL).
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ç olarak böler küme bölümlere.Pencere işlev her bölüm için ayrı ayrı uygulanır ve hesaplama her bölüm için yeniden başlatır.value_expression
Specifies the column by which the rowset produced by the corresponding FROM clause is partitioned.value_expression can only refer to columns made available by the FROM clause.value_expression cannot refer to expressions or aliases in the select list.value_expression can be a column expression, scalar subquery, scalar function, or user-defined variable.<ORDER BY yan tümce>
Derecelendirmesini uygulamak sırayı belirtir penceresi işlev.Daha fazla bilgi için bkz:ORDER BY yan tümce (Transact-SQL).Important Note:
Bir derecelendirme bağlamında kullanıldığında penceresi işlev <ORDER BY yan tümce> yalnızca FROM yan tümce ile yeniden kullanıma sütunlara başvurabilir. Seçim listesi adını veya diğer ad ad sütun konumunu gösteren bir tamsayı tarif edilemez.<ORDER BY yan tümce> toplamak penceresinde işlevler ile kullanılamaz.
Remarks
Window functions are defined in the ISO SQL standard.SQL Server provides ranking and aggregate window functions.Kullanıcı tanımlı BIR penceredir küme satır.Bir pencere işlev penceresinden türetilen bir sonuç kümesindeki her satır için bir değer hesaplar.
Birden fazla sıralama ya da toplamak penceresi işlev ile tek tek bir sorguda kullanılabilir FROM yan tümce.Ancak, her işlevinin ÜZERINDE yan bölme ve ayrıca sipariş farklı olabilir.ÜZERINDE yan tümce sağlama TOPLAMı ile kullanılan toplamak işlev.
Örnekler
C.ÜZERINDE yan tümce ROW_NUMBER işlevini kullanma
Her sıralama işlev, ROW_NUMBER DENSE_RANK, RANK, NTILE ÜZERINDE yan tümce kullanır.Kullanarak, aşağıdaki örnekte gösterildiği OVER yan tümce ile ROW_NUMBER.
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
GO
b.ÜZERINDE yan tümce ile toplamak işlevlerini kullanma
Aşağıdaki örnekler kullanarak OVER toplamak işlevleri ile yan tümce. Bu örnekte, kullanarak OVER yan tümce, alt sorgular kullanmaktan daha verimlidir.
USE AdventureWorks;
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
Here is the result set.
Salesorderıd |
Productıd |
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 |
Kullanarak, aşağıdaki örnekte gösterildiği OVER bir toplamak işlev bir hesaplanmış değeri ile yan tümce.
USE AdventureWorks;
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
Here is the result set. Toplamları tarafından hesaplandığı dikkat edin. SalesOrderID ve Percent by ProductID her birinin her satırı için hesaplanır. SalesOrderID.
Salesorderıd |
Productıd |
OrderQty |
Toplam |
Productıd 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 |