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

الحصول على آخر علامات طالب معين

بدأه m_w_rose في 30 أكتوبر 2019 · 0 رد · 550 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1

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

لدي قاعدة بيانات فيها جداول منها جدول العلامات (Marks) وجدول الطالب (Student) و جدول الكورسات بمعنى أخر المواد (Course)

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

وللأسف رغم كل محاولاتي بأشكال عديدة تعطيني تعليمات ال select  كل العلامات للطالب وليس حصرا الأخيرة

أهم جدول هوالجدول العلامات يحتوي على الأعمدة التالية حسب الترتيب:

IDStudent = رقم ID الجامعي للطالب 

,IDCourse, = رقم ID الخاص بالمادة 

IDSemester, = رقم الفصل الدراسي (مثلاً الفصل الأول رقم ID حسب الجدول 1 - الفصل الثاني رقم ID حسب الجدول 2)

IDScholasticYear, = رقم العام الدراسي (مثلاً 2018-2019 رقم ID حسب الجدول 6)

IDYearStudy, = السنة الدراسية للمادة

PracticalMark, = علامة  القسم العملي

TheoreticalMark,= علامة  القسم النظري

,FinalMark  = العلامة النهائية (مجموع القسم العملي مع النظري)

Note = ملاحظات

بعض الكودات الخاصة ببعض التعليمات التي جربتها .

أرجو المساعدة ...

/*هنا فقط اسماء وليس الأرقام ولم أستطيع تنفيذ أي شرط لجلب أىخر مادة/*
/*OR*//*شغال وهو يحضر اسم الطالب واسم المادة مع العلامةلها ويرتبها حسب العاماة التي أخذت آخر مرة لكن يحضر كل العلامات*/
select stu.Name,cour.Course,m.FinalMark,sem.Semester,syear.ScholasticYear from Course cour
inner join Marks m
on m.IDCourse = cour.ID

inner join Student stu on 
stu.ID = m.IDStudent and m.IDStudent=1

inner join Semester sem on
sem.ID = m.IDSemester

inner join ScholasticYear syear on
syear.ID = m.IDScholasticYear

order by m.IDScholasticYear, m.IDSemester desc
/*OR*/

select distinct IDStudent,IDCourse,IDSemester,IDScholasticYear,IDYearStudy,PracticalMark,TheoreticalMark,FinalMark from 
)

SELECT IDStudent,IDCourse,IDSemester,IDScholasticYear,IDYearStudy,PracticalMark,TheoreticalMark,FinalMark FROM Marks 
WHERE IDStudent = 1
UNION
SELECT top 1 IDStudent,IDCourse,IDSemester,IDScholasticYear,IDYearStudy,PracticalMark,TheoreticalMark,FinalMark from Marks
WHERE ((Select COUNT(DISTINCT IDCourse) FROM Marks) > 1)
     ORDER BY  IDScholasticYear,IDSemester desc ) t

/*OR*/

 SELECT 
    IDStudent, IDCourse, IDScholasticYear, IDSemester, IDYearStudy, PracticalMark, TheoreticalMark, FinalMark, Note,
( select  top 1 IDCourse from Marks m2 WHERE
    m1.IDStudent = m2.IDStudent and m1.IDCourse = m2.IDCourse
        ORDER BY m2.IDScholasticYear, m2.IDSemester desc ) FROM Marks m1
WHERE
    IDStudent = 1
        ORDER BY IDScholasticYear, IDSemester desc

تم تعديل هذه المشاركة بواسطة m_w_rose في 30 أكتوبر 2019 في 21:14

meme

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…