dense_rank (Transact-sql)
Bölüm içinde bir satır sıralaması herhangi bir boşluk olmayan bir sonuç kümesi verir. Satır sırası satırdan önce söz konusu gelen farklı sırada sayısı artı biri olduğunu.
Transact-SQL Sözdizim Kuralları
Sözdizimi
DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )
Bağımsız değişkenler
<partition_by_clause>
Sonuç kümesi tarafından üretilen ayıran from yan bölme dense_rank işlevinin uygulandığı. Bölüm tarafından sözdizimini, görmek Yan (Transact-sql).<order_by_clause>
dense_rank işlevi bir bölümündeki satırların uygulandığı sırayı belirler.
Dönüş Türleri
bigint
Açıklamalar
Aynı bölümde bir sıralaması için iki veya daha fazla satır kravat bağlı her satır alır aynı değerde. Örneğin, eğer iki en iyi satıcıyı aynı SalesYTDdeğeri iki sıralama bir. Satış Temsilcisi ile sonraki en yüksek SalesYTDis ranked sayısı iki. Bu daha fazla bu satırdan önce gelen farklı satır sayısı. Bu nedenle dense_rank işlevi tarafından döndürülen sayılar değil boşluklar var ve her zaman birbirini izleyen sırada var.
Tüm sorgu için kullanılan sıralama düzeni satırları bir sonuç görünme sırasını belirler. Bu sırada bir satır bölümü ilk satırda olmak zorunda değil anlamına gelir.
Örnekler
A.Bir bölüm içindeki satırları sıralama
Aşağıdaki örnek, belirtilen stok yerlere onların miktarlarına göre stoktaki ürünler yer alıyor. Sonuç kümesi tarafından bölümlendirilir LocationIDve mantıklı tarafından sipariş Quantity. 494 Ve 495 ürününün aynı miktarı olduğunu fark. Onlar bağlı olduğundan, bunların her ikisi de bir sıralanır.
USE AdventureWorks2012;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
,DENSE_RANK() OVER
(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'Rank'
FROM Production.ProductInventory i
INNER JOIN Production.Product p
ON i.ProductID = p.ProductID
WHERE i.LocationID BETWEEN 3 AND 4
ORDER BY i.LocationID;
GO
USE AdventureWorks2012;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
,DENSE_RANK() OVER
(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'Rank'
FROM Production.ProductInventory i
INNER JOIN Production.Product p
ON i.ProductID = p.ProductID
WHERE i.LocationID BETWEEN 3 AND 4
ORDER BY i.LocationID;
GO
Sonuç kümesi buradadır.
ProductID Name LocationID Quantity Rank
----------- ---------------------- ------------ -------- ----
494 Paint - Silver 3 49 1
495 Paint - Blue 3 49 1
493 Paint - Red 3 41 3
496 Paint - Yellow 3 30 4
492 Paint - Black 3 17 5
495 Paint - Blue 4 35 1
496 Paint - Yellow 4 25 2
493 Paint - Red 4 24 3
492 Paint - Black 4 14 4
494 Paint - Silver 4 12 5
(10 row(s) affected)
ProductID Name LocationID Quantity Rank
----------- ---------------------- ------------ -------- ----
494 Paint - Silver 3 49 1
495 Paint - Blue 3 49 1
493 Paint - Red 3 41 3
496 Paint - Yellow 3 30 4
492 Paint - Black 3 17 5
495 Paint - Blue 4 35 1
496 Paint - Yellow 4 25 2
493 Paint - Red 4 24 3
492 Paint - Black 4 14 4
494 Paint - Silver 4 12 5
(10 row(s) affected)
B.Sonuç kümesindeki tüm satırları sıralama
Aşağıdaki örnek, üst on çalışanları tarafından kendi maaş sırada verir. Bir bölümü tarafından yan belirtilmemiş olduğundan, sonuç kümesindeki tüm satırları sıralama işlevi uygulandığı.
USE AdventureWorks2012
SELECT TOP(10) BusinessEntityID, Rate,
DENSE_RANK() OVER (ORDER BY Rate DESC) AS RankBySalary
FROM HumanResources.EmployeePayHistory;
USE AdventureWorks2012
SELECT TOP(10) BusinessEntityID, Rate,
DENSE_RANK() OVER (ORDER BY Rate DESC) AS RankBySalary
FROM HumanResources.EmployeePayHistory;
Sonuç kümesi buradadır.
BusinessEntityID Rate RankBySalary
---------------- --------------------- --------------------
1 125.50 1
25 84.1346 2
273 72.1154 3
2 63.4615 4
234 60.0962 5
263 50.4808 6
7 50.4808 6
234 48.5577 8
285 48.101 9
274 48.101 9
BusinessEntityID Rate RankBySalary
---------------- --------------------- --------------------
1 125.50 1
25 84.1346 2
273 72.1154 3
2 63.4615 4
234 60.0962 5
263 50.4808 6
7 50.4808 6
234 48.5577 8
285 48.101 9
274 48.101 9