Aracılığıyla paylaş


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

Topic link iconTransact-SQL sözdizimi kuralları

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 noteImportant 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