PDA

View Full Version : سوال: بدست آوردن رتبه ی دانشجو از لیست دانشجویان



sokotn2008
یک شنبه 15 شهریور 1388, 00:17 صبح
با سلام به همگی
من در حال نوشتن برنامه ای هستم که از میان یک سری دانشجو رتبه ی هر دانشجو را محاسبه کرده و در جدولی دیگر ذخیره کند قطعه کدی که من برای آن نوشته ام به این صورت است که جواب نمی دهد

declare @Row bigint

set @Row=0

select @Row=Row_Number() over (order by grade desc))

from Student

where StdID=4

در واقع من می خواهم از جدول Student ابتدا براساس grade مرتب کنم و بعد ببینم سطر چندم است این دانشجو که در واقع همان رتبه اوست اگر می شود کمکم کنید یا راه حل بهتری را پیشنهاد کنید

محمد سلیم آبادی
یک شنبه 15 شهریور 1388, 01:11 صبح
در واقع همان query که استفاده کردید درست است ولی یک اشکال اساسی دارد، وقتی که از where استفاده می کنید در واقع لیست دانشجویان را فیلر خواهید کرد در نتیجه رتبه دانشجو از لیست فیلتر شده بدست خواهد آمد نه از لیست کل...

برای رفع این مشکل کافی است که از یک derived table استفاده شود.
و برای ذخیره rank دانشجویان در یک جدول یا ویو دیگر به شکل زیر عمل کنید.



declare @s table
(
stuID int primary key,
grade int not null
)

insert into @s
select 1,18 union all
select 2,17 union all
select 3,14

------
select stuID, rank
from
(
select stuID,
rank=row_number() over(order by grade desc)
from @s
)d
where stuID=2
----------
select stuID,
rank=row_number() over(order by grade desc)
into new_table
from @s
---------
create view view_1
as
select stuID,
rank=row_number() over(order by grade desc)
from @s