بررسی ()Row_number در SQL SERVER

()Row_Number :

این تابع برای هر ردیف یک عدد منحصر بفرد را بر می گرداند ، عدد انتساب داده شده به صورت ترتیبی به هر رکورد انتساب داده می شود که از یک شروع شده و به تعداد رکورد های برگردانده شده افزایش می یابد  .

ساختار دستور این دستور به صورت زیر می باشد :

ROW_NUMBER ( ) 
    OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )

استفاده از Partition اختیاری می باشد اما به کاربردن Order by الزامی می باشد .

.  برای درک بهتر ابتدا کوئری زیر را اجرا کنید :

declare @users Table
(
name  varchar(10),
Age      int ,
RoleId    int
)
insert into @users values('osman',23,1)
insert into @users values('ramin',30,2)
insert into @users values('saman',13,1)
insert into @users values('ali',18,3)

select * from @users

 اگر کوئری فوق را اجرا کنیم نتیجه ای زیر را می بینیم :

Sql query

حال دستور select را به صورت زیر تغییر می دهیم :

select *,
ROW_NUMBER() over (order by age) as Row
 from @users

و خروجی به صورت زیر تغییر خواهد کرد :

Sql query

همانطور که مشاهده می کنید در دستور Row_Number از Partition استفاده نکرده ایم . نوشتن دستور Row_Number در دستور فوق باعث شد تا به هر ردیف یک عدد ترتیبی نسبت دهد . چون در قسمت Order by بر اساس Age گذاشته بودیم ، ابتدا بر اساس Age به صورت صعودی مرتب می کند و بعد اعداد ترتیبی را به هر ردیف نسبت می دهد .

اگر در  دستور Row_Number از Parition هم به صورت زیر استفاده کنیم :

select *,
ROW_NUMBER() over ( partition by roleid order by age) as Row
 from @users

 نتیجه حاصل به صورت زیر خواهد بود :

Row_Number

استفاده از Partition باعث می شود ابتدا یک گروه بندی بر اساس ردیف مورد نظر انجام شود و بعد برای هر گروه شمارش ترتیبی را نسبت می دهد . مثلا برای RoleId با مقدار 1 چون دو ردیف وجود داشت ،هر دو رکورد در یک گروه در نظر گرفته و اعداد ترتیبی را به آنها نسبت می دهد .

 


توسط : عثمان رحیمی  5 ماه قبل ، دوشنبه 18 اسفند 1393 ساعت 07:58  3  5126

نظر شما برای ما مهم است و به ما در بهبود سایت کمک میکند.


ارسال نظر
  • نام (اختیاری ) :
  • پست الکترونیک :
  • توضیحات :

مطالب مرتبط

نظرات خوانندگان

کاربر مهمان (فرزانه)  در تاریخ : 1 ماه قبل ، سه شنبه 23 تیر 1394 ساعت 00:00

عذر میخوام ، خلاصه مطلب و عنوان و url با هم همخوانی ندارند.

عثمان در تاریخ : 1 ماه قبل ، سه شنبه 23 تیر 1394 ساعت 00:00

موضوع مقاله تابع Row_Number می باشد که متن مقاله و خلاصه ی آن در همین خصوص است .

کاربر مهمان (...)  در تاریخ : 1 ماه قبل ، جمعه 25 تیر 1395 ساعت 00:00

ممنون واقعا مطلب مفید بود