Aracılığıyla paylaş


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).

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

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 notÖ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

Ayrıca bkz.

Başvuru