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
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
Bir sonuç kümesinin çıktısını sayılar. Daha spesifik olarak, bir sonuç kümesinin bir bölümü içindeki sıralı sayıyı döndürür; her bölümün ilk satırı için 1'den başlar.
ROW_NUMBER ve RANK benzerler.
ROW_NUMBER tüm satırları sırayla numaralandırır (örneğin 1, 2, 3, 4, 5).
RANK beraberlikler için aynı sayısal değeri sağlar (örneğin 1, 2, 2, 4, 5).
Uyarı
ROW_NUMBER sorgu çalıştırıldığında hesaplanan geçici bir değerdir. Bir tabloda sayıları kalıcı tutmak için IDENTITY Property ve SEQUENCE'e bakınız.
Transact-SQL söz dizimi kuralları
Sözdizimi
ROW_NUMBER ( )
OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
Arguments
BÖLÜMLEME value_expression
FROM cümlesinin ürettiği sonuç kümesini, ROW_NUMBER fonksiyonunun uygulandığı bölümlere böler.
value_expression , sonuç kümesinin bölündüğü sütunu belirtir. Belirtilmediyse PARTITION BY , fonksiyon sorgu sonuç kümesinin tüm satırlarını tek bir grup olarak ele alır. Daha fazla bilgi için bkz. OVER Maddesi (Transact-SQL).
order_by_clause
Bu cümle ORDER BY , satırların belirli bir bölüm içinde benzersiz ROW_NUMBER olarak atanan sırasını belirler. Bu gereklidir. Daha fazla bilgi için bkz. OVER Maddesi (Transact-SQL).
Dönüş Türleri
bigint
Genel Açıklamalar
Aşağıdaki koşullar geçerli olmadıkça, bir sorgu kullanılarak ROW_NUMBER() döndürülen satırların, her yürütmede tamamen aynı sıralanmış olacağına dair hiçbir garanti yoktur.
Bölünmüş sütunun değerleri benzersizdir.
Sütunların
ORDER BYdeğerleri benzersizdir.Bölüm sütunu ve
ORDER BYsütunlarının değer kombinasyonları benzersizdir.
Eğer sütunlar ORDER BY sonuçlar içinde benzersiz değilse, veya DENSE_RANK()veya kullanmayı düşününRANK().
ROW_NUMBER() belirsiz değildir. Daha fazla bilgi için bkz . Deterministic ve Nondeterministic Functions.
Örnekler
A. Basit örnekler
Aşağıdaki sorgu, dört sistem tablosunu alfabetik sırayla döndürür.
SELECT
name, recovery_model_desc
FROM sys.databases
WHERE database_id < 5
ORDER BY name ASC;
Sonuç kümesi aşağıdadır.
| name | recovery_model_desc |
|---|---|
| master | BASİT |
| model | DOLU |
| msdb | BASİT |
| tempdb | BASİT |
Her satırın önüne bir satır numarası sütunu eklemek için, bu durumda adı olan fonksiyonun Row#olduğu bir sütun ROW_NUMBER ekleyin. Maddeyi ORDER BY maddeye OVER taşımalısın.
SELECT
ROW_NUMBER() OVER(ORDER BY name ASC) AS Row#,
name, recovery_model_desc
FROM sys.databases
WHERE database_id < 5;
Sonuç kümesi aşağıdadır.
| Sıra# | name | recovery_model_desc |
|---|---|---|
| 1 | master | BASİT |
| 2 | model | DOLU |
| 3 | msdb | BASİT |
| 4 | tempdb | BASİT |
PARTITION BY Sütundaki recovery_model_desc madde, değer değiştiğinde recovery_model_desc numaralandırmayı yeniden başlatır.
SELECT
ROW_NUMBER() OVER(PARTITION BY recovery_model_desc ORDER BY name ASC)
AS Row#,
name, recovery_model_desc
FROM sys.databases WHERE database_id < 5;
Sonuç kümesi aşağıdadır.
| Sıra# | name | recovery_model_desc |
|---|---|---|
| 1 | model | DOLU |
| 1 | master | BASİT |
| 2 | msdb | BASİT |
| 3 | tempdb | BASİT |
B. Satış temsilcileri için satır numarasını geri göndermek
Aşağıdaki örnek, Adventure Works Cycles'taki satış temsilcilerinin yılbaşından beri satış sıralamalarına göre satır numarası hesaplar.
USE AdventureWorks2022;
GO
SELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS Row,
FirstName, LastName, ROUND(SalesYTD,2,1) AS "Sales YTD"
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;
Sonuç kümesi aşağıdadır.
Row FirstName LastName SalesYTD
--- ----------- ---------------------- -----------------
1 Linda Mitchell 4251368.54
2 Jae Pak 4116871.22
3 Michael Blythe 3763178.17
4 Jillian Carson 3189418.36
5 Ranjit Varkey Chudukatil 3121616.32
6 José Saraiva 2604540.71
7 Shu Ito 2458535.61
8 Tsvi Reiter 2315185.61
9 Rachel Valdez 1827066.71
10 Tete Mensa-Annan 1576562.19
11 David Campbell 1573012.93
12 Garrett Vargas 1453719.46
13 Lynn Tsoflias 1421810.92
14 Pamela Ansman-Wolfe 1352577.13
C. Bir alt satır kümesi döndürülüyor
Aşağıdaki örnek, tablodaki SalesOrderHeader tüm satır sayılarını şu sırayla OrderDate hesaplar ve sadece satırları 50 dahil 60 eder.
USE AdventureWorks2022;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
FROM Sales.SalesOrderHeader
)
SELECT SalesOrderID, OrderDate, RowNumber
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;
D. ROW_NUMBER() ile BÖLÜM kullanımı
Aşağıdaki örnek, sorgu sonuç kümesini TerritoryNamesütunla bölmek için argümanı PARTITION BY kullanır. Maddede OVER belirtilen madde, ORDER BY her bölümdeki satır sıralarını sütunla SalesYTDsıralar. Cümledeki SELECT cümleORDER BY, tüm sorgu sonuç kümesini 'ye göre TerritoryNamesıralar.
USE AdventureWorks2022;
GO
SELECT FirstName, LastName, TerritoryName, ROUND(SalesYTD,2,1) AS SalesYTD,
ROW_NUMBER() OVER(PARTITION BY TerritoryName ORDER BY SalesYTD DESC)
AS Row
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0
ORDER BY TerritoryName;
Sonuç kümesi aşağıdadır.
FirstName LastName TerritoryName SalesYTD Row
--------- -------------------- ------------------ ------------ ---
Lynn Tsoflias Australia 1421810.92 1
José Saraiva Canada 2604540.71 1
Garrett Vargas Canada 1453719.46 2
Jillian Carson Central 3189418.36 1
Ranjit Varkey Chudukatil France 3121616.32 1
Rachel Valdez Germany 1827066.71 1
Michael Blythe Northeast 3763178.17 1
Tete Mensa-Annan Northwest 1576562.19 1
David Campbell Northwest 1573012.93 2
Pamela Ansman-Wolfe Northwest 1352577.13 3
Tsvi Reiter Southeast 2315185.61 1
Linda Mitchell Southwest 4251368.54 1
Shu Ito Southwest 2458535.61 2
Jae Pak United Kingdom 4116871.22 1
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
E. Satış temsilcileri için satır numarasını geri göndermek
Aşağıdaki örnek, satış temsilcilerinin atanan satış kotasına göre geri döner ROW_NUMBER .
-- Uses AdventureWorks
SELECT ROW_NUMBER() OVER(ORDER BY SUM(SalesAmountQuota) DESC)
AS RowNumber,
FirstName, LastName,
CONVERT(varchar(13), SUM(SalesAmountQuota),1) AS SalesQuota
FROM dbo.DimEmployee AS e
INNER JOIN dbo.FactSalesQuota AS sq
ON e.EmployeeKey = sq.EmployeeKey
WHERE e.SalesPersonFlag = 1
GROUP BY LastName, FirstName;
Kısmi bir sonuç kümesi aşağıdadır.
RowNumber FirstName LastName SalesQuota
--------- --------- ------------------ -------------
1 Jillian Carson 12,198,000.00
2 Linda Mitchell 11,786,000.00
3 Michael Blythe 11,162,000.00
4 Jae Pak 10,514,000.00
F. ROW_NUMBER() ile BÖLÜM kullanımı
Aşağıdaki örnek, fonksiyonun ROW_NUMBER argüman PARTITION BY ile birlikte kullanılmasını gösterir. Bu, fonksiyonun her bölümdeki satır numaralanmasına neden ROW_NUMBER olur.
-- Uses AdventureWorks
SELECT ROW_NUMBER() OVER(PARTITION BY SalesTerritoryKey
ORDER BY SUM(SalesAmountQuota) DESC) AS RowNumber,
LastName, SalesTerritoryKey AS Territory,
CONVERT(varchar(13), SUM(SalesAmountQuota),1) AS SalesQuota
FROM dbo.DimEmployee AS e
INNER JOIN dbo.FactSalesQuota AS sq
ON e.EmployeeKey = sq.EmployeeKey
WHERE e.SalesPersonFlag = 1
GROUP BY LastName, FirstName, SalesTerritoryKey;
Kısmi bir sonuç kümesi aşağıdadır.
RowNumber LastName Territory SalesQuota
--------- ------------------ --------- -------------
1 Campbell 1 4,025,000.00
2 Ansman-Wolfe 1 3,551,000.00
3 Mensa-Annan 1 2,275,000.00
1 Blythe 2 11,162,000.00
1 Carson 3 12,198,000.00
1 Mitchell 4 11,786,000.00
2 Ito 4 7,804,000.00
Ayrıca Bkz.
RÜTBE (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)