إقتباس(zahrah @ Mar 15 2007, 01:46 PM) [snapback]607793[/snapback]
تفضل اخي الكريم
راجع الإستعلام لمعرفة طريقة كيف الترتيب
إضغط لإظهار المرفق بارك الله فيك..
إجابتك كافيه والحمد لله..كنت أتوقع وجود دالة جاهزة في الأكسس لكنها لا توجد... يعني لازم نتعب
أختنا زهرة قامت بإعداد الاستعلام التالي:
كود
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، حيث يتم عرض الرتبة بالنص حسب الرقم الموجود في الرتبة بالرقم. ولكن يا أختنا زهرة هذه الطريقة ستكون مملة وطويلة لو كان عدد الطلاب كبير.. وبالطبع البديل هو إنشاء دالة تحول الرقم إلى نص مثل التي تستخذم في الفواتير.