Göre resmi Microsoft BOL DENSE_RANK deterministik olmayan bir ( RANK () ). Ancak Itzik Ben-Gan'ın Sıralama Fonksiyonlarına göre "... RANK () ve DENSE_RANK () fonksiyonları her zaman belirleyicidir". Kim haklı?
Şu ana kadar ne buldum: Microsoft'un Tanımı "Deterministik işlevler, belirli bir giriş değeri kümesiyle çağrıldığında ve veritabanının aynı durumu verildiğinde, her zaman aynı sonucu her zaman döndürür."
Yani Küme teorisi tablolarında Çalışanlar
Employee Salary
Sue Right 1.00
Robin Page 1.00
Phil Factor 1.00
ve Çalışanlar2
Employee Salary
Phil Factor 1.00
Sue Right 1.00
Robin Page 1.00
aynıdır. Ancak Sıralama işlevleri farklı değerler döndürür:
CREATE TABLE [dbo].[Employees](
--[ID] [int] IDENTITY(1,1) NOT NULL,
[Employee] [varchar](150) NOT NULL,
[Salary] [smallmoney] NULL,
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Employees2](
--[ID] [int] IDENTITY(1,1) NOT NULL,
[Employee] [varchar](150) NOT NULL,
[Salary] [smallmoney] NULL,
) ON [PRIMARY]
INSERT INTO [dbo].[Employees]
([Employee] ,[Salary])
VALUES
('Sue Right', 1)
, ('Robin Page', 1)
,('Phil Factor', 1 )
GO
INSERT INTO [dbo].[Employees2]
([Employee] ,[Salary])
VALUES
('Phil Factor', 1 )
,('Sue Right', 1)
,('Robin Page', 1)
GO
SELECT RANK() OVER ( ORDER BY Salary) AS [Rank]
, DENSE_RANK() OVER (ORDER BY Salary ) AS [Dense_rank]
, [Employee]
FROM
dbo.Employees
SELECT RANK() OVER ( ORDER BY Salary) AS [Rank]
, DENSE_RANK() OVER (ORDER BY Salary ) AS [Dense_rank]
, [Employee]
FROM
dbo.Employees2
SELECT NTILE(3) OVER ( ORDER BY SALARY )
, [Employee]
FROM
dbo.Employees
SELECT NTILE(3) OVER ( ORDER BY SALARY )
, [Employee]
FROM
dbo.Employees2