المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: إرجاع ترتيب قيمة في سجلات معينة
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات قواعد البيانات > منتدى مبرمجي قواعد بيانات Microsoft Access > قسم أرشيف الاستعلامات
ahmed2all
السلام عليكم ورحمة الله وبركاته
سؤالي هو كيف أرجع ترتيب قيمة معينة في سجل مقارنة مع باقي القيم الأخرى في نفس الجدول أو الاستعلام.
مثلا لدينا جدول مخزن فيه معلومات الطلاب كما يلي:
رقم الطالب
اسم الطالب
المعدل
المتحصل عليه خلال السنة الدراسية

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

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


فهل هناك دالة معينة يمكنها مقارنة سجل معين مع باقي السجلات؟ أم يلزم إجراء استعلام آخر أم ماذا؟
في انتظار ردودكم الكريمة...
zahrah
تفضل اخي الكريم
راجع الإستعلام لمعرفة طريقة كيف الترتيب
إضغط لإظهار المرفق
ahmed2all
إقتباس(zahrah @ Mar 15 2007, 01:46 PM) [snapback]607793[/snapback]
تفضل اخي الكريم
راجع الإستعلام لمعرفة طريقة كيف الترتيب
إضغط لإظهار المرفق


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

كنت أتوقع وجود دالة جاهزة في الأكسس لكنها لا توجد... يعني لازم نتعب teeth_smile.gif
أختنا زهرة قامت بإعداد الاستعلام التالي:
كود
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
عاجل laugh.gif
لم تصلح معي هذه الطريقة عندما أردت ترتيب قيمة في استعلام وليس في جدول
وهذا الاستعلام بدوره يعتمد على استعلام آخر جدولي.
أرجو من الأخت زهرة أن تكمل خيرها بتوضيح هذا المشكل وهل هناك حل (أو أي واحد يمكنه ذلك)
ahmed2all
up
mohds200
الاخت زهرة شكرا على المثال لكن هناك طلاب يكون الترتيب مكرر يعني يكون الاول وهناك الاول مكرر فكيف يكون ذلك
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.