در SQL Server، ROW_NUMBER یک تابع تحلیلی (Analytic Function) است که برای اختصاص یک شماره به هر ردیف در نتیجه یک پرس و جو (Query) استفاده میشود. این شماره به طور خودکار و مرتب بر اساس یک ستونی که تعیین میکنید، به هر ردیف اختصاص مییابد. فرمت کلی استفاده از ROW_NUMBER به صورت زیر است:
ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY column_sort_expression [ASC | DESC])
در اینجا:
PARTITION BY (اختیاری): شما میتوانید نتایج را بر اساس یک یا چند ستون به گروههای کوچکتر تقسیم کنید. هر گروه جداگانه شمارهگذاری میشود.
ORDER BY: ستونی که بر اساس آن ردیفها مرتب میشوند و شماره به آنها اختصاص داده میشود. میتوانید از هر ستونی که برای مرتبسازی میخواهید استفاده کنید.
ASC | DESC (اختیاری): مشخص میکند که ردیفها بر اساس ستون مرتبسازی شود به صورت صعودی (ASC) یا نزولی (DESC).
در زیر یک نمونه از استفاده از ROW_NUMBER در SQL Server را مشاهده میکنید:
SELECT ROW_NUMBER() OVER (ORDER BY ProductID) AS RowNumber, ProductName FROM Products;
در این مثال فوق، هر ردیف نتیجه با شمارهای که توسط ROW_NUMBER اختصاص داده شده است، نمایش داده میشود. ردیفها بر اساس ستون ProductID مرتبسازی میشوند. امیدوارم توضیحات بالا برای شما مفید باشد. در صورت داشتن سوالی دیگر، در بخش کامنت ها مطرح بفرمائین.
در این مثال زیر، دادهها را بر اساس یک ستون به گروههای کوچکتر تقسیم میکنیم و سپس برای هر گروه، شماره ردیف را اختصاص میدهیم. برای این منظور، از عبارت PARTITION BY استفاده میکنیم.
فرض کنید میخواهیم یک پرس و جو بنویسیم تا شماره ردیف هر محصول در هر دسته بندی (Category) را نمایش دهد. در این صورت میتوانیم از ROW_NUMBER با PARTITION BY استفاده کنیم. در ادامه یک مثال را برای شما نمایش میدهم:
SELECT ROW_NUMBER() OVER (PARTITION BY Category ORDER BY ProductID) AS RowNumber, Category, ProductName FROM Products;
در این مثال، ردیفها بر اساس ستون ProductID مرتب میشوند و برای هر دسته بندی (Category)، شماره ردیف با استفاده از ROW_NUMBER و PARTITION BY اختصاص داده میشود. نتیجه شبیه به زیر خواهد بود:
RowNumber | Category | ProductName
|
------------------------------------
|
1 | Electronics | TV
|
2 | Electronics | Laptop
|
3 | Electronics | Smartphone
|
1 | Clothing | Shirt
|
2 | Clothing | Pants
|
3 | Clothing | Shoes
|
4 | Clothing | Hat
|
1 | Books | Novel
|
2 | Books | Biography
|
3 | Books | Self-Help
|
همانطور که مشاهده میکنید، شماره ردیف برای هر دسته بندی (Category) به صورت مستقل از سایر دستهها اختصاص داده شده است. امیدوارم این مثال ها به شما کمک کند. در صورت داشتن سوال یا نیاز به اطلاعات بیشتر، در بخش کامنت ها مطرح فرمائید.