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

كتابة استعلام

بدأه Tammam_KD في 4 مايو 2011 · 7 رد · 595 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ................. أود السؤال عن الآلية التي سأستخدمها عند كتابة استعلام يعيد البيانات التالية :

عندي جدول طلاب وجدول علامات وجدول علامات الطلاب .............. أريد كتابة استعلام يعيد كل الطلاب الراسبين بثلاث مواد أو أكثر ....... الصراحة لم تخطر ببالي طريقة مناسبة أرجو المساعدة

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#3

حسنا إليك البنية ............

جدول الطلاب وفيه (studentID(pk),StudentFullName)

جدول المواد وفيه ( SubjectID(pk),SubjectName )

جدول العلامات الطالب ( studentID,SubjectID,ProjectMark,ExamMark )

هذه هي البنية .............

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#4

اعتقد ان هذا الاستعلام يقوم بالمهمة

لمعرفة الراسبين في 3 مواد فاكثر نستخدم

 
SELECT studentID ,count(*) FROM marks
 where ExamMark  <= 50 group by studentID having count(*) >=3

بعد ذلك نربطه مع جدول الطلاب للحصول على اسماء الطلاب فيصبح الاستعلام كمايلي :

 
SELECT *  FROM students ss inner join ( SELECT studentID ,count(*) FROM marks
 where ExamMark  <= 50 group by studentID having count(*) >=3) mm on ss.studentID =mm.studentID
#5

مشكور أخي الكريم طبقت ما قلته لي على جدولي الخاص وغليك الاستعلام :

SELECT     Students.StudentID, Students.StudentFName, Students.StudentLName
FROM         Marks INNER JOIN (SELECT     StudentID, COUNT(*) AS Expr1
FROM         Marks
WHERE     (MidTermMark + ActivityMark + ExamMark < 50)
GROUP BY StudentID
HAVING      (COUNT(*) >= 3))
                       ON Marks.StudentID = Students.StudentID

يعطيني الخطأ التالي لم أجد حل له 

Incorrect syntax near the keyword 'ON'.

مشكور سلفا

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#6

عدلت الاستعلام كما يلي :

SELECT     StudentID, StudentFName, StudentLName
FROM         Students ss INNER JOIN (SELECT     StudentID, COUNT(*) AS Expr1
FROM         Marks
WHERE     (MidTermMark + ActivityMark + ExamMark < 50)
GROUP BY StudentID
HAVING      (COUNT(*) >= 3)) mm
                       ON mm.StudentID = ss.StudentID

فأصبحت رسالة الخطأ هي : Invalid object name 'Students'. علما أن الاسم صحيح

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#7
اقتباس
Invalid object name 'Students'

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

وجرب خطوة خطوة

1-

 
SELECT     StudentID, StudentFName, StudentLName
FROM         Students ss

2-

 
SELECT     StudentID, COUNT(*) AS Expr1
FROM         Marks
WHERE     (MidTermMark + ActivityMark + ExamMark < 50)
GROUP BY StudentID
HAVING      (COUNT(*) >= 3)

3-وبعد ذلك جرب الاستعلام كاملا

 

SELECT     StudentID, StudentFName, StudentLName
FROM         Students ss INNER JOIN (SELECT     StudentID, COUNT(*) AS Expr1
FROM         Marks
WHERE     (MidTermMark + ActivityMark + ExamMark < 50)
GROUP BY StudentID
HAVING      (COUNT(*) >= 3)) mm
                       ON mm.StudentID = ss.StudentID
#8

ممممممممممممممممممم تم حل المشكلة كما يلي :

SELECT     Students.StudentID, Students.StudentFName, Students.StudentLName
FROM         Students INNER JOIN (SELECT     StudentID, COUNT(*) AS NumberOfSubject
FROM         Marks
WHERE     (MidTermMark + ActivityMark + ExamMark < 60)
GROUP BY StudentID
HAVING      (COUNT(*) >= 3))
                      Marks ON Students.StudentID = Marks.StudentID

شكرا لجهودك

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

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