Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri
Microsoft Fabric'te
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği SQL veritabanı
Yan tümcesindeki WINDOW adlandırılmış pencere tanımı, bir yan tümcedeki pencereyi OVER kullanan window işlevinden önce bir satır kümesinin bölümlemesi ve sırasını belirler.
WINDOW yan tümcesi, veritabanı uyumluluk düzeyi veya daha yüksek bir düzey 160 gerektirir. Veritabanı uyumluluk düzeyiniz değerinden 160düşükse, Veritabanı Altyapısı yan tümcesiyle WINDOW sorgu yürütemez.
Uyumluluk düzeyini görünümde sys.databases veya veritabanı özelliklerinde de kontrol edebilirsiniz. Aşağıdaki komutla veritabanının uyumluluk düzeyini değiştirebilirsiniz:
ALTER DATABASE DatabaseName
SET COMPATIBILITY_LEVEL = 160;
Transact-SQL söz dizimi kuralları
Syntax
WINDOW window_name AS (
[ reference_window_name ]
[ <PARTITION BY clause> ]
[ <ORDER BY clause> ]
[ <ROW or RANGE clause> ]
)
<PARTITION BY clause> ::=
PARTITION BY value_expression , ... [ n ]
<ORDER BY clause> ::=
ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ , ...n ]
<ROW or RANGE clause> ::=
{ ROWS | RANGE } <window frame extent>
Arguments
window_name
Tanımlı pencere belirtiminin adı. Bu ad, yan tümcesindeki OVER pencere işlevleri tarafından pencere belirtimine başvurmak için kullanılır. Pencere adları, tanımlayıcılar için kurallara uymalıdır.
reference_window_name
Geçerli pencere tarafından başvurulmakta olan pencerenin adı. Başvuruda bulunılan pencere yan tümcesinde WINDOW tanımlanan pencereler arasında olmalıdır.
Diğer bağımsız değişkenler şunlardır:
Order BY , sonuç kümesinin her bölümü içindeki satırların mantıksal sırasını tanımlar.
Bölüm içindeki başlangıç ve bitiş noktalarını belirterek bölüm içindeki satırları sınırlayan SATIRSAY/ARALIK.
Bağımsız değişkenler hakkında daha ayrıntılı bilgi için OVER yan tümcesine bakın
Remarks
Yan tümcesinde WINDOW birden fazla adlandırılmış pencere tanımlanabilir.
window_name OVER belirtimler kullanılarak yan tümcesindeki adlandırılmış bir pencereye daha fazla bileşen eklenebilir. Ancak yan tümcesinde WINDOW belirtilen özellikler yan tümcesinde OVER yeniden tanımlanamaz.
Sorgu birden çok pencere kullandığında, adlandırılmış bir pencere window_name kullanarak başka bir adlandırılmış pencereye başvurabilir. Bu durumda, başvuruda bulunan window_name başvuran pencerenin pencere tanımında belirtilmelidir. Bir pencerede tanımlanan pencere bileşeni, başvuruda bulunan başka bir pencere tarafından yeniden tanımlanamaz.
Pencere yan tümcesinde pencerelerin tanımlanma sırasına bağlı olarak, ileri ve geri pencere başvurularına izin verilir. Başka bir deyişle, bir pencere, tanımlandıkları sıradan bağımsız olarak reference_window_name olarak, pencere ifadesinde tanımlanan başka bir pencereyi kullanabilir. Tek bir pencerede döngüsel başvurulara ve birden çok pencere başvurusu kullanılmasına izin verilmez.
Bir pencere ifadesinde yer alan tanımlı bir pencerenin yeni window_name kapsamı, pencere yan tümcesini içeren sorgu belirtiminin veya SELECT deyiminin yan tümcesiyle SELECT birlikte pencere ifadesinin parçası olan tüm pencere tanımlarından oluşur. Pencere ifadesi, temel bir tablo sorgusu olan sorgu ifadesinin parçası olan bir sorgu belirtiminde yer alıyorsa, yeni window_name kapsamı varsa, bu sorgu ifadesinin ifadesini de içerir ORDER BY .
Yan tümcesindeki OVER pencere belirtimlerinin semantiğine göre toplama ve analiz işlevleriyle kullanımına yönelik kısıtlamalar yan tümce için WINDOW geçerlidir.
Examples
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.
A. window yan tümcesinde tanımlanan bir pencere belirtin
Aşağıdaki örnek sorgu, yan tümcesinde OVER adlandırılmış bir pencere kullandığını gösterir.
ALTER DATABASE AdventureWorks2022
SET COMPATIBILITY_LEVEL = 160;
GO
USE AdventureWorks2022;
GO
SELECT ROW_NUMBER() OVER win AS [Row Number],
p.LastName,
s.SalesYTD,
a.PostalCode
FROM Sales.SalesPerson AS s
INNER JOIN Person.Person AS p
ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address AS a
ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0
WINDOW win AS
(
PARTITION BY PostalCode ORDER BY SalesYTD DESC
)
ORDER BY PostalCode;
GO
Aşağıdaki sorgu, yan tümcesini kullanmadan önceki sorgunun eşdeğeridir WINDOW .
USE AdventureWorks2022;
GO
SELECT ROW_NUMBER() OVER (
PARTITION BY PostalCode ORDER BY SalesYTD DESC
) AS [Row Number],
p.LastName,
s.SalesYTD,
a.PostalCode
FROM Sales.SalesPerson AS s
INNER JOIN Person.Person AS p
ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address AS a
ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0
ORDER BY PostalCode;
GO
Sonuç kümesi aşağıdadır.
| Satır Numarası | LastName | SalesYTD | PostalCode |
|---|---|---|---|
| 1 | Mitchell | 4251368.5497 | 98027 |
| 2 | Blythe | 3763178.1787 | 98027 |
| 3 | Carson | 3189418.3662 | 98027 |
| 4 | Reiter | 2315185.611 | 98027 |
| 5 | Vargas | 1453719.4653 | 98027 |
| 6 | Ansman-Wolfe | 1352577.1325 | 98027 |
| 1 | Pak | 4116871.2277 | 98055 |
| 2 | Varkey Chudukatil | 3121616.3202 | 98055 |
| 3 | Saraiva | 2604540.7172 | 98055 |
| 4 | Ito | 2458535.6169 | 98055 |
| 5 | Valdez | 1827066.7118 | 98055 |
| 6 | Mensa-Annan | 1576562.1966 | 98055 |
| 7 | Campbell | 1573012.9383 | 98055 |
| 8 | Tsoflias | 1421810.9242 | 98055 |
B. Birden çok OVER yan tümcesinde tek bir pencere belirtme
Aşağıdaki örnekte bir pencere belirtimi tanımlama ve bunu yan OVER tümcede birden çok kez kullanma gösterilmektedir.
ALTER DATABASE AdventureWorks2022
SET COMPATIBILITY_LEVEL = 160;
GO
USE AdventureWorks2022;
GO
SELECT SalesOrderID,
ProductID,
OrderQty,
SUM(OrderQty) OVER win AS [Total],
AVG(OrderQty) OVER win AS [Avg],
COUNT(OrderQty) OVER win AS [Count],
MIN(OrderQty) OVER win AS [Min],
MAX(OrderQty) OVER win AS [Max]
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN (43659, 43664)
WINDOW win AS (PARTITION BY SalesOrderID);
GO
Aşağıdaki sorgu, yan tümcesini kullanmadan önceki sorgunun eşdeğeridir WINDOW .
USE AdventureWorks2022;
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 aşağıdadır.
| SalesOrderID | ProductID | OrderQty | Total | 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 |
C. Pencere yan tümcesinde ortak belirtim tanımlama
Bu örnek, bir pencerede ortak belirtim tanımlamayı ve yan tümcesinde OVER ek belirtimleri tanımlamak için kullanmayı gösterir.
ALTER DATABASE AdventureWorks2022
SET COMPATIBILITY_LEVEL = 160;
GO
USE AdventureWorks2022;
GO
SELECT SalesOrderID AS OrderNumber,
ProductID,
OrderQty AS Qty,
SUM(OrderQty) OVER win AS Total,
AVG(OrderQty) OVER (win PARTITION BY SalesOrderID) AS Avg,
COUNT(OrderQty) OVER (
win ROWS BETWEEN UNBOUNDED PRECEDING
AND 1 FOLLOWING
) AS Count
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN (43659, 43664)
AND ProductID LIKE '71%'
WINDOW win AS
(
ORDER BY SalesOrderID, ProductID
);
GO
Aşağıdaki sorgu, yan tümcesini kullanmadan önceki sorgunun eşdeğeridir WINDOW .
USE AdventureWorks2022;
GO
SELECT SalesOrderID AS OrderNumber,
ProductID,
OrderQty AS Qty,
SUM(OrderQty) OVER (ORDER BY SalesOrderID, ProductID) AS Total,
AVG(OrderQty) OVER (
PARTITION BY SalesOrderID ORDER BY SalesOrderID, ProductID
) AS Avg,
COUNT(OrderQty) OVER (
ORDER BY SalesOrderID,
ProductID ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING
) AS Count
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN (43659, 43664)
AND ProductID LIKE '71%';
GO
Sonuç kümesi aşağıdadır.
| OrderNumber | ProductID | Qty | Total | Avg | Count |
|---|---|---|---|---|---|
| 43659 | 711 | 4 | 4 | 4 | 2 |
| 43659 | 712 | 2 | 6 | 3 | 3 |
| 43659 | 714 | 3 | 9 | 3 | 4 |
| 43659 | 716 | 1 | 10 | 2 | 5 |
| 43664 | 714 | 1 | 11 | 1 | 6 |
| 43664 | 716 | 1 | 12 | 1 | 6 |
D. İleri ve geri pencere başvuruları
Bu örnek, yan tümcesinde WINDOW yeni bir pencere tanımlarken ileri ve geri başvurular olarak adlandırılmış pencerelerin kullanılmasını gösterir.
ALTER DATABASE AdventureWorks2022
SET COMPATIBILITY_LEVEL = 160;
GO
USE AdventureWorks2022;
GO
SELECT SalesOrderID AS OrderNumber, ProductID,
OrderQty AS Qty,
SUM(OrderQty) OVER win2 AS Total,
AVG(OrderQty) OVER win1 AS Avg
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN(43659,43664) AND
ProductID LIKE '71%'
WINDOW win1 AS (win3),
win2 AS (ORDER BY SalesOrderID, ProductID),
win3 AS (win2 PARTITION BY SalesOrderID);
GO
Aşağıdaki sorgu, yan tümcesini kullanmadan önceki sorgunun eşdeğeridir WINDOW .
USE AdventureWorks2022;
GO
SELECT SalesOrderID AS OrderNumber, ProductID,
OrderQty AS Qty,
SUM(OrderQty) OVER (ORDER BY SalesOrderID, ProductID) AS Total,
AVG(OrderQty) OVER (PARTITION BY SalesOrderID ORDER BY SalesOrderID, ProductID) AS Avg
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN(43659,43664) AND
ProductID LIKE '71%';
GO
Sonuç kümesi aşağıdadır.
| OrderNumber | ProductID | Qty | Total | Avg |
|---|---|---|---|---|
| 43659 | 711 | 4 | 4 | 4 |
| 43659 | 712 | 2 | 6 | 3 |
| 43659 | 714 | 3 | 9 | 3 |
| 43659 | 716 | 1 | 10 | 2 |
| 43664 | 714 | 1 | 11 | 1 |
| 43664 | 716 | 1 | 12 | 1 |