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

الاستعلام معقد يحوي استعلامات فرعية

بدأه eng.kemo في 13 سبتمبر 2009 · 2 رد · 525 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

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

بينما كنت أعمل على برنامج Microsoft SQL Server 2005 احتجت لعمل استعلام ما جعلني أكره SQL Server و أكره قواعد البيانات و البرمجة و كل ماله علاقة بالكمبيوتر :wacko: :wacko: :wacko:

( الله الحفيظ)

مقدمة :

لدي قاعدة بيانات بها عدة جداول .. هذه الجداول التي أحتاجها في الاستعلام:

Student_tbl

Record_tbl

LEFT TO RIGHT

Record_tbl:

==================================

student_id ||rec_date || new || revision ||

==================================

39 || 1/1/2000 || 1 || 5 ||

40 || 1/1/2000 || 2 || 8 ||

15 || 2/2/2000 || 4 || 100 ||

39 || 2/3/2001 || 5 || 6 ||

40 || 3/3/2001 || 4 || 10 ||

15 || 4/3/2001 || 6 || 101 ||

39 || 5/6/2002 || 9 || 9 ||

40 || 5/6/2002 || 6 || 11 ||

15 || 9/5/2002 || 9 || 114 ||

===================================

Student_tbl:

========================

student_id ||Student_name ||

========================

39 || AHMED ||

40 || MOHAMED ||

15 || ALI ||

========================

المطلوب :

انشاء استعلام يحتوي على اسم الطالب و أول جديد و أخر مراجعة و ذلك بين تاريخين محددين

مثلاً :

بيانات الطلبة من جدول REC_DATE بين التاريخين 1/1/2000 و 1/1/2002حيث يكون سجل كل طالب يحوي أو جديد له و أخر مراجعة

بحيث يكون الناتج النهائي للجدول

LEFT TO RIGHT

======================================

student_id ||student_name || new || revision ||

======================================

39 || AHMED || 1 || 6 ||

40 || MOHAMED || 2 || 10 ||

15 || ALI || 4 || 101 ||

======================================

حاولت عمل ذلك بعدة طرق و لكنني لم أنجح بعد

(لا أحب كلمة فشل .. فليس هناك فشل و لكن هناك طرق غير صحيحة للتوصل إلى الحل)

أفيدونا أفادكم الله

و آسف للإطالة

#2

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

الحقيقة مش عارف ! أكثر من 40مشاهدة لكن مفيش ولارد واحد

مش مشكلة .. احنا في العشر الأواخر و يمكن الناس مش فاضية

المهم .. بعد الدعبسة و البحث المستميت و القاتل على الانترنت و المنتديات و الصفحات و كل المصادر المعلومة و المجهولة

تمكنت من التوصل إلى شيء

الكود التالي :

select record_tbl.student_id, record_tbl.new from (select student_id, min(rec_date) as min_date from record_tbl group by student_id) x

inner join record_tbl as record_tbl on record_tbl.student_id = x.student_id and record_tbl.rec_date = x.min_date

بس المشكلة ان ده يديني العمود new و ليس العمود revision

يعني الناتج هيكون كده

=======================

student_id ||rec_date || new ||

=========================

39 || 1/1/2000 || 1 ||

40 || 1/1/2000 || 2 ||

15 || 2/2/2000 || 4 ||

========================

طيب لو انا لعبت في الكود كمان ممكن أخليه يديني العمود revision بس العمود revision لوحده

select record_tbl.student_id, record_tbl.revision from (select student_id, max(rec_date) as max_date from record_tbl group by student_id) x

inner join record_tbl as record_tbl on record_tbl.student_id = x.student_id and record_tbl.rec_date = x.max_date

و الناتج هيكون كده

=======================

student_id ||rec_date || new ||

=========================

39 || 5/6/2002 || 9 ||

40 || 5/6/2002 || 11 ||

15 || 5/9/2002 ||114 ||

========================

السؤال دلوقتي هوا : هل من الممكن اني أظهر نتيجة الجدولين ؟ بمعنى أدق كود يخرج لي الأعمدة Student_id, new, revision و يكون يضم النتيجة من الجدولين الناتجين عن استعلامين

بحيث تكون النتيجة:

========================

student_id || new || revision ||

========================

39 || 1 || 9 ||

40 || 2 || 11 ||

15 || 4 || 114 ||

========================

و لكم جزيل الشكر

#3

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

جرب الكود ده


from(select r_tbl.student_id as student_id1,r_tbl.new as new ,r_tbl.revision as revision,s_tbl.student_id as student_id2,s_tbl.Student_name
from Record_tbl r_tbl
inner join Student_tbl s_tbl on r_tbl.student_id=s_tbl.student_id and r_tbl.rec_date>='1/1/2000' and r_tbl.rec_date<'1/1/2002'
where r_tbl.student_id=39)
as My_Student_table
group by student_id1,student_id2,Student_name
select student_id1,student_id2,Student_name,min(new) as new ,max(revision) as revision

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