অফিসিয়াল মাইক্রোসফ্টের মতে বিওএল DENSE_RANK হ'ল ননডেটেরিস্টেমিক ( RANK () )। তবে ইটজিক বেন- গানের র্যাঙ্কিং ফাংশন অনুসারে "... র্যাঙ্ক () এবং ডেনসE_RANK () ফাংশনগুলি সর্বদা নিরস্ত্রী থাকে"। কে ঠিক আছে?
আমি এ পর্যন্ত যা খুঁজে পেয়েছি: মাইক্রোসফ্টের সংজ্ঞা "নির্ধারিত ফাংশনগুলি সর্বদা একই ফলাফলটি যে কোনও সময় ইনপুট মানগুলির একটি নির্দিষ্ট সেট সহ ডাকা হয় এবং ডাটাবেসটির একই অবস্থা হিসাবে ডাকা হয়" "
সুতরাং সেট তত্ত্ব টেবিল কর্মচারী
Employee Salary
Sue Right 1.00
Robin Page 1.00
Phil Factor 1.00
এবং কর্মচারী 2
Employee Salary
Phil Factor 1.00
Sue Right 1.00
Robin Page 1.00
সব একই. তবে র্যাঙ্কিং কার্যগুলি বিভিন্ন মান দেয়:
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