الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Paginating Through a Result Set via T-SQL

مغلق
بدأه AhmedElbaz في 30 ديسمبر 2006 · 3 رد · 798 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لغه ال T-SQL تمكنك من حل معظم مشاكلك بشكل جيد

ومنها Paginating Through a Result Set

المشكله

انت تريد مثلا التصفح خلال الResult Set الناتجه من Query معين بحيث تعرض البيانات مثلا 10 سجل في كل مره عن طريق زر التالي و ايضا الرجوع عن طريق زر السابق و هكذا

الحل

اولا نتعرف علي ال ROW_NUMBER Window Function

هذه الداله تستخدم لاعطاء رقم وحيد لكل سجل في الاستعلام

بفرض ان الاستعلام علي جدول واحد tab و به عمود واحد data

و نريد استرجاع بيانات الجدول و ترقيم كل سجل بالترتيب ابيتداء من 1

select row_number( ) over (order by data) as rn,data
from tab

لقد حصلنا الان علي تسلسل لكل سجل

كيف استخدمه لتحديد عدد و مدي السجلات المطلوبه

نقوم بتحديد ذلك باستخدام WHERE Clause

مثلا السجلات من 1 ال 10

select row_number( ) over (order by data) as rn,data
from tab
where rn between 1 and 10

الان بفرض ان الاستعلام الاصلي

select data from tab

نستبدل الجدول tab بال In Line View السابق او الاستعلام السابق

فيكون

الحل

select data
from
(
select row_number( ) over (order by data) as rn,data
from tab
where rn between 1 and 10
)

و بتغير القيم تستطيع تغير عدد و مدي السجلات

و ذلك بجعل هذه القيم متغيرات مثلا

ووضع الاستعلام في اجراء مخزن

لو تحتاج التسلسل فلا داعي لعمل subQuery

select row_number( ) over (order by data) as rn,data
from tab
where rn between 1 and 10

للحديث بقيه ان شاء الله

#2

شكرا جزيلا على المقال القيم، قمت بتعديل العنوان.

الشيء الذي لم تذكره في مقالك هو أن هذا الحل (الدالة row_number) هو من إحدى الميزات الخاصة بSQL Server 2005

شكرا جزيلا مرة أخرى على المقال، وفي انتظار البقية

:)

فكر بطريقة أخرى

#3

شكرا يا walcom

#4

Skipping n-numbered Rows from a Result Set

المشكله

تريد مثلا استرجاع السجلات التي تحمل ترتيب فردي او زوجي

مثلا السجل الثاني و الرابع و السادس و هكذا

الحل

اولا اعطاء تسلسل لكل سجل Rank

و ذلك باستخدام ال ROW_NUMBER Window Function

قمنا باستخدامها في المشاركه الاولي

ثم استخدام عمليه ال Mod اي باقي القسمه و يعبر عنها في ال SQL Server بالرمز %

بفرض ان الاستعلام علي جدول واحد tab و به عمود واحد data و نريد استرجاع السجلات ذات التسلسل الفردي

يكون الاستعلام

select data
from
(
select row_number( ) over (order by data) as rn,data
from tab
)
where rn % 2 = 1

هذا الموضوع مغلق.

مواضيع مشابهة