Инструкция Sql для возврата списка частичных сборов
Пожалуйста, помогите мне, я застрял с этим SQL-оператором. Я новичок в SQL, я разрабатываю программное обеспечение для управления школой C#.
Это мой запрос Select:
SELECT distinct RTRIM(Students.StudentNumber),RTRIM(Students.StudentSurname),RTRIM(Students.StudentFirstNames),RTRIM(CourseFeePayment.PaymentDue) from Students,CourseFeePayment,CourseFeePayment_Join where Students.StudentNumber=CourseFeePayment.StudentNumber and CourseFeePayment.CourseFeePaymentID=CourseFeePayment_Join.C_PaymentID and CourseFeePayment.SchoolYear=@d1 and CourseFeePayment.Student_Class=@d2 and CourseFeePayment_Join.Month=@d3 and CourseFeePayment.PaymentDue > 0 order by 2 cmd.Parameters.AddWithValue("@d1", cmbAcademicYear.Text); cmd.Parameters.AddWithValue("@d2", cmbClass.Text); cmd.Parameters.AddWithValue("@d3", cmbMonth.Text); rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); dgw.Rows.Clear(); while ((rdr.Read() == true)) { dgw.Rows.Add(rdr(0), rdr(1), rdr(2), rdr(3), rdr(4)); }
Мне нужно это, чтобы вернуть список на строку каждого студента, который частично задолжал из этого конкретного класса только за этот конкретный месяц. Под частичным я подразумеваю, что если плата за класс составляет, например, 100 долларов за январь, то если студент ничего не заплатил (задолжал полную сумму), то его следует игнорировать и в этом случае перечислять только студентов, задолжавших от более чем 0 до менее чем 100.
Этот запрос хорошо работает только тогда, когда у меня есть только один студент и я возвращаю правильную оплату. Если у меня есть много студентов в том же месяце, он возвращает их, но с неправильной суммой оплаты. Если у меня есть студент, который заплатил в рассрочку (заплатил более одного раза), но не закончил, он возвращает каждый взнос одного и того же студента по другой строке с разной суммой платежа.
Что я уже пробовал:
Любая помощь будет оценена по достоинству. Вот мои таблицы:
Students Table: StudentID (primary) StudentNumber StudentSurname StudentFirstNames
CourseFeePayment Table: CourseFeePaymentID (primary) PaymentID StudentNumber SchoolYear TotalFee PreviousDue GrandTotal TotalPaid PaymentDue Student_Class
CourseFeePayment_Join Table: CourseFeePayment_J_ID C_PaymentID Fee Month