PDA

View Full Version : کمک در مورد نوشتن یک دستور



tabatabaeefar
دوشنبه 25 مهر 1390, 16:47 عصر
سلام دوستان
من یک جدول دارم (مثل تصویر).
فیلد TotalNumber از جدول مقدار داره.
با توجه به مقدار این فیلد باید به فیلد TotaoRank مقدار بدم ( همون طور که توی تصویر میبینید )
TotalNumber به صورت نزولی مرتب شده.
عملا باید به افراد با توجه به TotalNumber رتبه بدم.
لطفا راهنماییم کنید.


76719


ممنون

pashna
دوشنبه 25 مهر 1390, 21:50 عصر
SELECT

TotalNumber ,

ROW_NUMBER() OVER ( ORDER BY TotalRank DESC ) AS TotalRank
FROM

[Table]

tabatabaeefar
دوشنبه 25 مهر 1390, 22:58 عصر
ممنون که جواب دادید
اما فکر نمیکنم مشکل من اینجوری حل بشه.
اگر دقت کرده باشید بعضی از مواقع رتبه ها تکراری هستن.
مثلا رتبه 3 نفر 2 شده و رتبه 3 و 4 نداریم.
من یه دستور Update لازم دارم نه Select
میخوام یه SP بسازم.

یوسف زالی
سه شنبه 26 مهر 1390, 23:27 عصر
سلام.
روش اول: ساخت فرمولی که از روی داده ردیف اول تولید رنک می کنه.
روش دوم: مرتب کردن ردیف اول به فرم distinct و اختصاص شماره ردیف به اونها ؛ سپس اختصاص شماره ردیف به ستون مورد نظر که داده اون مساوی ستون داده در ردیف مورد نظره.

مقدار های رنک بر چه اساسی نمره دهی می شن؟

tabatabaeefar
چهارشنبه 27 مهر 1390, 00:12 صبح
سلام
ممنون از توجهتون.
به نفر اول رتبه 1 داده میشه.
به دلیل اینکه نمره نفر دوم از نمره نفر اول کمتره و در مکان 2 قرار داره، رتبه 2 رو میگیره.
نمره نفراتی که در ردیف های 3 و 4 هستند با نمره نفر دوم برابره. بنابر این اونها هم رتبه 2 رو میگیرن.
حالا میریم سراغ نفر 5 . با توجه به اینکه فرد ردیف 5 نمره ایی کمتر از فرد ردیف 4 داره، بنابر این با توجه به شماره سطرش رتبه 5 بهش اختصاص پیدا میکنه.
بقیه هم به همین صورت.
فکر میکنم باید این کار رو توی یک حلقه انجام بدم.
اما نمیدونم چطور باید بین رکورد ها حرکت کنم

یوسف زالی
چهارشنبه 27 مهر 1390, 10:00 صبح
دوست من برات یه نمونه می گذارم.
از روی همین ایده بگیر:

declare @tbl as table(i int, rnk int default(0))
insert into @tbl(i)
values (10),(20),(20),(20),(22),(22),(27);
with CTE as (selectROW_NUMBER()over (order by i desc) row,* from @tbl)
update CTE
set rnk = row
update @tbl
set rnk = y
from
(
select i,min(rnk)
from @tbl
group by i
) X(x, y)
where i = x
select *
from @tbl
order by i desc