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

إرجاع ترتيب قيمة في سجلات معينة

مغلق
بدأه ahmed2all في 14 مارس 2007 · 5 رد · 2,656 مشاهدة · في قسم أرشيف الاستعلامات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

سؤالي هو كيف أرجع ترتيب قيمة معينة في سجل مقارنة مع باقي القيم الأخرى في نفس الجدول أو الاستعلام.

مثلا لدينا جدول مخزن فيه معلومات الطلاب كما يلي:

رقم الطالب

اسم الطالب

المعدل المتحصل عليه خلال السنة الدراسية

وأنا أريد أن أعمل استعلام يقوم بعرض المعلومات التالية:

رقم الطالب

اسم الطالب

المعدل

ترتيب الطالب (حسب المعدل مقارنة مع باقي الطلاب في نفس الجدول).

فهل هناك دالة معينة يمكنها مقارنة سجل معين مع باقي السجلات؟ أم يلزم إجراء استعلام آخر أم ماذا؟

في انتظار ردودكم الكريمة...

AHMED2ALL/at\Hotmail.com

#2

تفضل اخي الكريم

راجع الإستعلام لمعرفة طريقة كيف الترتيب

AVG_RANK.rar

#3
zahrah كتب:
تفضل اخي الكريم

راجع الإستعلام لمعرفة طريقة كيف الترتيب

AVG_RANK.rar

بارك الله فيك..

إجابتك كافيه والحمد لله..

كنت أتوقع وجود دالة جاهزة في الأكسس لكنها لا توجد... يعني لازم نتعب :D

أختنا زهرة قامت بإعداد الاستعلام التالي:

SELECT StuTemp.StID, StuTemp.StName, StuTemp.StAvg, (Select Count (*) from tblST Where [StAvg] > [StuTemp].[StAvg])+1 AS nRank, IIf([nRank]=1,"الأول",IIf([nRank]=2,"الثاني",IIf([nRank]=3,"الثالث",IIf([nRank]=4,"الرابع",IIf([nRank]=5,"الخامس",IIf([nRank]=6,"السادس",IIf([nRank]=7,"السابع",IIf([nRank]=8,"الثامن",IIf([nRank]=9,"التاسع",IIf([nRank]=10,"العاشر")))))))))) AS tRank
FROM tblST AS StuTemp
ORDER BY StuTemp.StAvg DESC;

وهو استعلام مركب، يعني استعلام يحتوي على استعلام فرعي (Sub Query).

وسأقدم لكم بعض الشرح حتى يستفيذ الجميع.

لدينا جدول وحيد وهو جدول الطلاب واسمه tblSt يحتوي على الحقول التالية:

رقم الطالب

اسم الطالب

معدل الطالب

- يقوم الاستعلام باستخراج المعلومات التالية:

رقم الطالب

اسم الطالب

معدل الطالب

ترتيب الطالب رقما

ترتيب الطالب نصا

بالطبع رقم الطالب واسم الطالب ومعدل الطالب كلها موجودة وجاهزة في جدول الطلاب، لكن من أين نحصل على ترتيب الطالب؟

والإجابة هي أننا نستعمل استعلام فرعي يقوم بحساب رتبة الطالب. فكرته أنه يفترض أن الطالب الحالي رتبته 1 ثم يقوم بالبحث في جدول الطلاب عن عدد الطلاب الذين يملكون معدلا أكبر من معدل الطالب الحالي ويضيف هذا العدد إلى رتبة الطالب الحالي (مثلا وجد 3 أكبر منه يصبح ترتيبه 4 وهكذا).

وبما أن الاستعلام الرئيسي يستخرج البيانات من جدول الطلاب والاستعلام الفرعي يقوم بحساب رتبة الطالب باستخذام نفس الجدول فلذلك يقع خلط بين أسماء الحقول في الجدول، يعني كيف يعرف الاستعلام الفرعي الحقلين اللذين يقارنهما؟

والإجابة هي أنه يجب استخذام الخاصية alias. حيث نقوم بإعادة تسمية جدول الطلاب في الاستعلام الرئيسي باسم آخر (في هذا المثال أختنا زهرة أسمته StuTemp).

والحقيقة أن هذه الخاصية هي التي كانت سببا في مشكلتي أصلا، حيث أنني كنت أظن أن استعمال هذه الخاصية اختياري وهو من أجل إعادة تسمية جدول مثلا من أجل إعطائه معنى أفضل، ولكني كما ترون وصلت إلى اللحظة التي أوجبت عليّ استخذام هذه الخاصية وعلمت أنه يجب استخذامها في مثل هذه الحالات (حالات استعمال نفس الكائن عدة مرات في نفس الوقت).

والآن بقي فقط عرض الرتبة بالحروف (نص) وهو شيء لم أطلبه لكن أختنا زهرة أضافته، وقد قامت باستخذام الدالة iif، حيث يتم عرض الرتبة بالنص حسب الرقم الموجود في الرتبة بالرقم. ولكن يا أختنا زهرة هذه الطريقة ستكون مملة وطويلة لو كان عدد الطلاب كبير.. وبالطبع البديل هو إنشاء دالة تحول الرقم إلى نص مثل التي تستخذم في الفواتير.

AHMED2ALL/at\Hotmail.com

#4

عاجل :lol:

لم تصلح معي هذه الطريقة عندما أردت ترتيب قيمة في استعلام وليس في جدول

وهذا الاستعلام بدوره يعتمد على استعلام آخر جدولي.

أرجو من الأخت زهرة أن تكمل خيرها بتوضيح هذا المشكل وهل هناك حل (أو أي واحد يمكنه ذلك)

AHMED2ALL/at\Hotmail.com

#5

up

AHMED2ALL/at\Hotmail.com

#6

الاخت زهرة شكرا على المثال لكن هناك طلاب يكون الترتيب مكرر يعني يكون الاول وهناك الاول مكرر فكيف يكون ذلك

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

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