مرحباً اخى عبد العزيز البسكري
نظرياً لاتمام الامر يجب عليك كا فكرياً تحويل العمود الى صف والصف الى عمود
يعنى بعد ما كان رئس كل عمود بالجدول هو اسماء المواد فاصبح الامر عكسي ولاتمام ذلك
فعلك انشاء جدول وهمى خاصة بالداتا التى تتواجد فى الجدول الرئيسي لديك
يعنى مثلاً انا بقول كالتالى
كود :
select ahmed from tb
فهنا الـ tb الرئيسي لديك تريدك عكس الامور التى به لتعطي نتائج محددة
فهنا مش هينفع اقول from tb انما هقول كالتالى
كود :
From (Select......)
والوظيفة هنا هو الجدول للشكل الذى اريده لجلب البيانات التى بها بالطريقة المطلوبة
طيب لاتمام الامر وعدد الاسطر كثيرة فهنا سيتطلب انشاء لكل عمود جدول وهمي ليصبح الناتج
كود :
From (Select....), (Select....) .....
وبما انك لديك 10 اعمدة مطلوب التلاعب بها وهى خاصة المواد الدراسية فهنا سيتطلب عمل Select التى بعد From بعدد 10 مرات عن كل مدة
طبعاً بهذا الشكل اصبح كود الاستعلام كبير جداً ولاتمام الامر للذكر مرة ومن ثمة تكرار الامر للانثي مرة اصبح اكبر
ولكى اقوم بتوفير التكرار وحجم الكود فى الكتابة احببت ان اقوم بهذا التعديل على المشروع الخاص بك
كل ما علك التالى تاتى عند Sub الخاص بالتالى Recuperer_Record_Bachalaureat_Masculin_Feminin_Absence
وتقوم بحذف كل ما بداخله وتستبدله بالكود التالى
كود :
If Conne_2020.State = ConnectionState.Closed Then Conne_2020.Open()
Dim _Gender As String() = New String() {"ذكر", "أنثى"}
Dim _Absent As String = "غائب"
Using Cmd As OleDbCommand = New OleDbCommand(Nothing, Conne_2020)
For i As Integer = 0 To 1
Cmd.CommandText = "SELECT Sum(T1.Arabe + T2.Physique + T3.Islamique + T4.Civile + T5.Mathematique + T6.Anglais + T7.Historique + T8.Francais + T9.Science + T10.Amazighe) As Male
FROM
(SELECT
Count(*) AS Arabe
FROM
TBL_STUDENT
WHERE
STUDENT_Gender = '" & _Gender(i) & "' AND
STUDENT_Absence_Arabe = '" & _Absent & "') as T1,
(SELECT
Count(*) AS Physique
FROM
TBL_STUDENT
WHERE
STUDENT_Gender = '" & _Gender(i) & "' AND
STUDENT_Absence_Physique = '" & _Absent & "') as T2,
(SELECT
Count(*) AS Islamique
FROM
TBL_STUDENT
WHERE
STUDENT_Gender = '" & _Gender(i) & "' AND
STUDENT_Absence_Islamique = '" & _Absent & "') as T3,
(SELECT
Count(*) AS Civile
FROM
TBL_STUDENT
WHERE
STUDENT_Gender = '" & _Gender(i) & "' AND
STUDENT_Absence_Civile = '" & _Absent & "') as T4,
(SELECT
Count(*) AS Mathematique
FROM
TBL_STUDENT
WHERE
STUDENT_Gender = '" & _Gender(i) & "' AND
STUDENT_Absence_Mathematique = '" & _Absent & "') as T5,
(SELECT
Count(*) AS Anglais
FROM
TBL_STUDENT
WHERE
STUDENT_Gender = '" & _Gender(i) & "' AND
STUDENT_Absence_Anglais = '" & _Absent & "') as T6,
(SELECT
Count(*) AS Historique
FROM
TBL_STUDENT
WHERE
STUDENT_Gender = '" & _Gender(i) & "' AND
STUDENT_Absence_Historique = '" & _Absent & "') as T7,
(SELECT
Count(*) AS Francais
FROM
TBL_STUDENT
WHERE
STUDENT_Gender = '" & _Gender(i) & "' AND
STUDENT_Absence_Francais = '" & _Absent & "') as T8,
(SELECT
Count(*) AS Science
FROM
TBL_STUDENT
WHERE
STUDENT_Gender = '" & _Gender(i) & "' AND
STUDENT_Absence_Science = '" & _Absent & "') as T9,
(SELECT
Count(*) AS Amazighe
FROM
TBL_STUDENT
WHERE
STUDENT_Gender = '" & _Gender(i) & "' AND
STUDENT_Absence_Amazighe = '" & _Absent & "') as T10
"
If (i) Then
TextBox3.Text = Cmd.ExecuteScalar().ToString()
Else
TextBox2.Text = Cmd.ExecuteScalar().ToString()
End If
Next
End Using
If Conne_2020.State = ConnectionState.Open Then Conne_2020.Close()
قمت بعمل مسافة بين كل جزء فى كود الاستعلام حتى توضح لك الفكرة
وقمت ببعض اللمسات لعدم التكرار وتقليل من حجم الكتابة فى الكود وبالنهاية سيكون الناتج كالتالى 9 + 3
وبكده تكون اتمت المطلوب الذى تريده تماماً
طيب شى اضافى كده عنا ما كنت تقوم به مسبقاً تتذكر هذا الكود الخاص بك
كود :
SELECT COUNT(*)
From TBL_STUDENT
Where
STUDENT_Absence_Arabe='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Physique='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Islamique='غائب' And STUDENT_Gender='ذكر'
Or STUDENT_Absence_Civile='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Mathematique='غائب' And STUDENT_Gender='ذكر'
Or STUDENT_Absence_Anglais='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Historique='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Francais='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Science='غائب' And STUDENT_Gender='ذكر' Or
STUDENT_Absence_Amazighe='غائب' And STUDENT_Gender='ذكر'
فى المرة القادمة عندما تريد استخدامه
لتحديد عدد الافراد المتغيبين اجعلها بهذا الشكل
كود :
SELECT COUNT(*)
From (SELECT * From TBL_STUDENT Where STUDENT_Gender='ذكر')
Where
STUDENT_Absence_Arabe='غائب' Or
STUDENT_Absence_Physique='غائب' Or
STUDENT_Absence_Islamique='غائب' Or
STUDENT_Absence_Civile='غائب' Or
STUDENT_Absence_Mathematique='غائب' Or
STUDENT_Absence_Anglais='غائب' Or
STUDENT_Absence_Historique='غائب' Or
STUDENT_Absence_Francais='غائب' Or
STUDENT_Absence_Science='غائب'Or
STUDENT_Absence_Amazighe='غائب'
حتى تتمكن عمل الفكرة لما شرحته بالاعلى ولما ستجده بالكود بالاعلى مثل كود For
لتحويل كلمة واحدة فقط وهى من ذكر الى انثي والعكس دون تكرارها 10 مرات
اتمنى ان يفيدك الكود وان يكون الشرح مبسط
تم ارفاق المشروع بعد عمد بعد تعديلات ولمسات على شكل وترتيب الفورم وبعض الاكواد