مطالبی را که در ادامه به آنها پرداخته می شوند جزء پرس و جوهای پیشرفته (Advanced Querying) طبقه بندی می شوند. البته فراموش نکنید که زبان SQL تنها به Querying خلاصه نمی شود، بلکه مباحث جذاب دیگری را شامل می شود، بطور نمونه تعریف ساختار جداول بانک. عموما بدلیل اینکه SQL بطور فریب انگیزی ساده به نظر می رسد افراد کمی برای حرفه ای شدن در آن وقت صرف می کنند.
برای اینکه افراد با مباحث پیشرفته و حرفه ای آشنا شوند تاکنون سعی بر آن داشتم که به اینگونه عناوین بپردازم. مثل cross tabbing, removing duplicates, splitting, relational division, concatenating. و در این لحظه برای بحث Analytical Ranking Function وقت صرف خواهیم کرد.
Analytical Ranking Functions
SQL Server از چهار تابع Ranking پشتیبانی می کند. یعنی RANK, DENSE_RANK, ROW_NUMBER و NTILE. این توابع روش بسیار موثر و ساده ای را برای تولید و محاسبه ی Ranking در اختیار گذاشته اند. البته باید توجه داشت که در نسخه ی 2000 این توابع داخلی (Built-in) وجود ندارند. و ناچاریم از روشهای جایگزین (Alternate Solution) این محاسبات را انجام دهیم. در این مقاله به روش های جایگزین نیز پرداخته خواهد شد. یکی از دلایل آن افزایش تجربه در منطق querying است.
توابع ranking جزء توابع OLAP یا (online analytic processing) به حساب می آیند. و به این توابع window function نیز گفته می شود.
توابع Ranking دارای 3 زیر ماده (subclauses) هستند، ranking function و ordering و partitioning:
ranking_function OVER([PARTITION BY col_list] ORDER BY col_list)
ماده ی اختیاری partition_by به ما اجازه می دهد که از توابع برای هر بخش (یا گروهی) بطور مستقل استفاده کنیم.
Row_Number
این تابع اعداد ترتیبی را به هر سطر از جدول بر اساس ترتیب مشخص شده به نتیجه ی کوئری (query result set) می دهد. به مثال زیر توجه کنید که از دو طریق شماره ترتیبی به نتیجه ی یک کوئری بر اساس ستون nbr داده شده است:




پیوند ها