نمایش بیشترین مقدار با دستور Select در خروجی SQL Sever
باسلام خدمت دوستان عزیز ، فرض کنید یک جدول به نام T داریم که دارای 3 فیلد به نامهای ID و Age و Record می باشد که در فیلد ID کد انحصاری هر شخص وجود دارد و در فیلد Age سن و در فیلد Record مدت زمان رکورد آن شخص وجود دارد. پس برای نمایش رکورد ها به صورت نزولی کد زیر را می نویسیم
SELECT ID ,Age ,Record FROM T Order By Record DESC
حالا اگر بخواهیم که فقط بیشترین رکورد از را در خروجی نشان دهد که مربوط که کدام ID می باشد. چطوری باید بنویسیم؟ مثلا در خروجی باشد:
ID***Age***Record 12.618***40***100
واگر بخواهیم بیشترین رکورد ها را بر اساس سن گروه بندی (زیر 30 سال و 31 تا 40 و بالای 41 سال) کنیم چطور مثلا بخواهیم ؟ مثلا در خروجی باشد ، رکورد سن زیر 30 سال** رکورد سن 31 تا 40** رکورد سن بالای 41
20.65 *** 12.618 **** 5.68
باتشکر و سپاس از شما دوستان عزیز
5 پاسخ
سلام به شما itpro ای عزیز.
شما می توانید برای حل سوال اول کد زیر را بنویسید
SELECT TOP 1 * FROM T ORDER BY Record DESC
و برای حل سوال دوم باید سه قسمت بنویسید که هر قسمت را با where جدا نمایید.
از دوستان عزیز کمال تشکر و سپاس را دارم
من بخش دوم کد را به صورت زیر نوشتم
SELECT TOP 1 ID ,Age ,Record,
CASE WHEN Age<30 Then 'Something 1'
WHEN Age between '31' and '40' Then 'Something 2'
WHEN Age >50 Then 'Something 3'
ELSE 'Something 4'
END
from T GROUP BY ID ,Sen ,Record ORDER BY Record DESC
ولی این کد در اصل میگه که کسی که بیشترین رکورد را دارد در کدام گروه سنی قرار دارد. ولی در اصل من می خواهم در خروجی سه رکورد را ببینم. یعنی ببینم که در بیشترین رکورد در گروه سنی زیر 30 سال چند و مربوط به کدام ID است و نیز بیشترین رکورد در گروه سنی 31 تا 40 چند و مربوط به کدام ID است و بیشترین رکورد در گروه سنی آخر چند و مربوط به کدام ID است.
باتشکر
سلام برای قسمت دوم سئوالتون باید در Select تون دستور Group By و Case رو لحاظ کنید.
مثلا
CASE WHEN Age<30 Then 'Something 1'
WHEN Age >40 Then 'Something 2'
WHEN Age >50 Then 'Something 3'
ELSE 'Something 4'
END
متوجه شدم...
این دستور بیشترین رکورد در هر رده سنی رو مشخص می کنه .
SELECT ID ,Age ,Record,
FROM (SELECT *,
ROW_NUMBER() OVER(PARTITION BY Age
ORDER BY Record DESC) AS RNK
FROM table_name
)TBL
WHERE RNK= 1;
نکته:این تابع از نسخه 2005 به بعد قابل استفاده است.