2012-04-21 55 views
1

在我下面的查询我想设置为0,0,0 @TMarks,@OMarks,@Percentage如果分别与他们使用的SELECT语句返回任何如何设置默认值在输出参数

create procedure [dbo].[TestRecordSelectMInfo] 
@GRNo varchar(4), 
@SessionId numeric(1), 
@TestTypeId numeric(1), 
@TMarks int output, 
@OMarks numeric(4) output, 
@Percentage numeric(4) output, 
@Grade varchar(4) output 
as 
begin 
SELECT Subjects.Subject, Marks.TotalMarks, Marks.PassingMarks, TestRecord.Marks, Result = case when TestRecord.Marks = 'A' then 'A' else case when cast(TestRecord.Marks as numeric) < Marks.PassingMarks then 'F' else 'P' end end FROM Subjects INNER JOIN Marks ON Subjects.SubjectId = Marks.SubjectId INNER JOIN TestRecord ON Subjects.SubjectId = TestRecord.SubjectId AND Marks.TestTypeId = TestRecord.TestTypeId where TestRecord.SessionId = @SessionId and TestRecord.TestTypeId = @TestTypeId and TestRecord.GRNo = @GRno 
set @TMarks = (select sum(Marks.TotalMarks) from Marks inner join TestRecord on Marks.TestTypeId = TestRecord.TestTypeId and Marks.SubjectId = TestRecord.SubjectId where TestRecord.SessionId = @SessionId and TestRecord.TestTypeId = @TestTypeId and TestRecord.GRNo = @GRNo and TestRecord.Marks <> 'A' and cast(TestRecord.Marks as numeric) > Marks.PassingMarks) 
set @OMarks = (select sum(cast(TestRecord.Marks as numeric)) from Marks inner join TestRecord on Marks.TestTypeId = TestRecord.TestTypeId and Marks.SubjectId = TestRecord.SubjectId where TestRecord.SessionId = @SessionId and TestRecord.TestTypeId = @TestTypeId and TestRecord.GRNo = @GRNo and TestRecord.Marks <> 'A' and cast(TestRecord.Marks as numeric) > Marks.PassingMarks) 
set @Percentage = @OMarks/@TMarks * 100; 
set @Grade = case 
when @Percentage < 50 
then 
'NIL' 
else 
case 
when @Percentage < 60 
then 
'C' 
else 
case 
when @Percentage < 70 
then 
'B' 
else 
case 
when @Percentage < 80 
then 
'A' 
else 
case 
when @Percentage <= 100 
then 
'A+' 
else 
'FAIL' 
end 
end 
end 
end 
end 
end 
GO 

回答

2

编辑:没有group by的集合返回null为空集。你可以解决这个与insull

select @TMarks = IsNull(sum(Marks.TotalMarks),0) 
from Marks 
inner join TestRecord 
    on Marks.TestTypeId = TestRecord.TestTypeId 
    and Marks.SubjectId = TestRecord.SubjectId 
where TestRecord.SessionId = @SessionId 
    and TestRecord.TestTypeId = @TestTypeId 
    and TestRecord.GRNo = @GRNo 
    and TestRecord.Marks <> 'A' 
    and cast(TestRecord.Marks as numeric) > Marks.PassingMarks 
+0

如何使用我的编码在你的答案 – kashif 2012-04-21 11:56:43

+0

好,更详细的例子现在 – Andomar 2012-04-21 12:01:49

+0

对不起,这不工作 – kashif 2012-04-21 12:04:52