Я не знаю, что не так с этой функцией - PullRequest
1 голос
/ 14 марта 2011

Эй ... У меня есть эта база данных, и мне нужно создать функцию, которая возвращает процент студентов, которые сдали предмет, но я не знаю, что я сделал не так ... Не могли бы вы помочь мне, пожалуйста ??? Вот моя диаграмма Diagram и вот моя функция ...

create function fnPassedStudents(@Semester varchar(7),@CodSubjects varchar(5))
returns @Passed
TABLE (
Semester varchar(7),
Cod_Subjects varchar(5),
Name_Subjects varchar(80),
Nro_Students int,
Nro_Passed float,
Nro_Failed float,
PercentagePassed varchar(4))
as
begin
declare @NroPassed float
select @NroPassed = count(M.Cod_Student)
from Matricula M inner join Subjects A on M.Cod_Subjects = A.Cod_Subjects
Where M.Semester=@Semester and M.Cod_Subjects = @CodSubjects and M.Grade>=10

insert into @Passed 
select M.Semester, A.Cod_Subjects, A.Name_Subjects, COUNT(M.Cod_Student) as Total, 
@NroPassed as Passed, (COUNT(M.Cod_Student) - @NroPassed) as Failed,
((@NroPassed * 100)/(count(M.Cod_Student))) as PercentagePassed
from Matricula M inner join Subjects A on M.Cod_Subjects = A.Cod_Subjects
Group by M.Semester, A.Cod_Subjects, A.Name_Subjects
return  
end
go

Я не уверен, что этой информации достаточно ... но, пожалуйста, наберитесь терпения, и я добавлю все, что вам нужно ... Спасибо !!!

1 Ответ

3 голосов
/ 14 марта 2011
create function fnPassedStudents(@Semester varchar(7),@CodSubjects varchar(5))
returns @Passed
TABLE (
Semester varchar(7),
Cod_Subjects varchar(5),
Name_Subjects varchar(80),
Nro_Students int,
Nro_Passed float,
Nro_Failed float,
PercentagePassed varchar(4))
as
begin
insert into @Passed 
select
    M.Semester,
    A.Cod_Subjects,
    A.Name_Subjects,
    count(distinct M.cod_student),
    count(case when M.Grade>=10 then 1 end),
    count(*) - count(case when M.Grade>=10 then 1 end),
    count(case when M.Grade>=10 then 1 end) / count(distinct M.cod_student) * 100
from Matricula M
inner join Subjects A on M.Cod_Subjects = A.Cod_Subjects
Group by M.Semester, A.Cod_Subjects, A.Name_Subjects
return  
end
go

Ингредиенты

count(distinct M.cod_student) - количество студентов, принимающих семестр /subject case when M.Grade>=10 then 1 end - выдает 1 при прохождении, в противном случае - ноль.NULL не считаются count(*) - count(case..) - дополнение прошло = не удалось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...