PDA

View Full Version : رتبه بندي در sql 2000 با پرش رتبه هاي تكراري



smakhavan
سه شنبه 11 خرداد 1389, 10:48 صبح
سلام
اگه بخواهيم يك كوئري بنويسم كه در sql 2000 رتبه بندي انجام دهد ميتوانيم از روش زير استفاده كنيم.



CREATE TABLE [dbo].[rank] (
[pk_id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[point] [int] NOT NULL
) ON [PRIMARY]
GO

insert into rank (name, point) values ('abc',250)
insert into rank (name, point) values ('xyz',150)
insert into rank (name, point) values ('pqr',350)
insert into rank (name, point) values ('stu',200)
insert into rank (name, point) values ('vwx',270)
insert into rank (name, point) values ('srk',250)

select [R1].[pk_id],[R1].[name], [R1].[point], rank = (select count(distinct [R2].[point]) from [rank] [R2] where [R1].[point] <= [R2].[Point]) from [rank] [R1]
order by [rank]

http://www.codeproject.com/KB/reporting-services/Rank_Query.aspx
مشكلي كه اين روش داره اين هست كه رتبه هايي با نمره يكسان را به صورت يكسان نشان ميدهد اما رتبه بعدي را اضافه نميكند


3 pqr 350 1
5 vwx 270 2
6 srk 250 3
1 abc 250 3
4 stu 200 4
2 xyz 150 5

اما من مثل اين ميخواهم باشد


3 pqr 350 1
5 vwx 270 2
6 srk 250 3
1 abc 250 3
4 stu 200 5
2 xyz 150 6

اگه عبارت distinct را بردارم به اين صورت نشون ميده كه اين را هم من نميخوام و براي من قابل قبول نيست


3 pqr 350 1
5 vwx 270 2
6 srk 250 4
1 abc 250 4
4 stu 200 5
2 xyz 150 6

محمد سلیم آبادی
سه شنبه 11 خرداد 1389, 11:14 صبح
سلام،
این چطوره کارتون را راه می اندازد؟


SELECT pk_id, CAST(name AS CHAR(5)) AS name, Point
, ( SELECT COUNT(r2.point )
FROM [rank] [R2]
WHERE [R1].[point] < [R2].[Point] )
+ ( SELECT COUNT(DISTINCT r2.point)
FROM [rank] [R2]
WHERE [R1].[point] = [R2].[Point] ) AS [rank]
FROM [rank] [R1]
ORDER BY [rank];

/*pk_id name Point rank
----------- ----- ----------- -----------
3 pqr 350 1
5 vwx 270 2
6 srk 250 3
1 abc 250 3
4 stu 200 5
2 xyz 150 6

(6 row(s) affected)
*/