2011-03-14 98 views
1

嘿...我有这个数据库,我需要创建一个函数,返回通过一个主题的学生的百分比,但我不知道我做错了什么... 请问你能帮帮我吗???这是我的图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 [email protected] 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 

我不确定是否该信息就足够了...但是请耐心I'll添加您需要什么...谢谢! !

+0

它在做什么或不做什么?它会崩溃吗?给出错误?或者只是不做你的期望? – Jason 2011-03-14 02:02:55

回答

3
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) - 学生采取学期/受试者 case when M.Grade>=10 then 1 end的数 - 产生1传递时,否则返回null。 NULLs不计COUNTED count(*) - count(case..) - 通过的补码=失败

+0

它工作完美!!!!!!非常感谢你......我有很多东西要学习T_T – brisonela 2011-03-14 02:12:32