2013-03-01 39 views
0

我有一个标量函数,它被写入3次并有一个小的改变。我打算将这三个函数合并成一个函数。标量函数 - 合并

ForStudent- A 
Declare @CN INT 
SELECT @cn=COUNT(*) 
FROM XYZ A 
WHERE A.subjects in ('1223','2234','3345') 

IF @cnt>3  
SELECT @Pass=1  
ELSE  
SELECT @Pass=0 

RETURN @Pass 
END 




//Similarly ForStudent - B 
    Declare @CN INT 
     SELECT @cn=COUNT(*) 
     FROM XYZ A 
     WHERE A.subjects in ('1214','0987','0098') 

     IF @cnt>5  
     SELECT @Pass=1  
     ELSE  
     SELECT @Pass=0 

     RETURN @Pass 
     END 

同为学生3

比如只有3名学生(固定值= 3),他们有固定的sujects。我如何将这三个功能合并为一个?

I am presently doing with 
IF @Student= 'A' 
BEGIN 
Call the code for A 
END 
IF @Student = 'B' 
BEGIN 
Call the code for B 
END 
IF @Student = 'C' 
Call the code for C 
END 

有没有更好的解决方案,任何人都可以想到的? 谢谢,

回答

0

做到这一点的显而易见的方法是有一个StudentSubjects表(可能有一些迹象表明它用于此功能,或使用现有的这样的表,其中3个特殊主题可以用某种方式标记)

CREATE TABLE StudentSubjects (
    StudentID char(1) not null, 
    Subject char(4) not null 
) 

(你有3排为每个学生,每个科目分开存放)

然后你的函数将只是:

SELECT @cn=COUNT(*) 
FROM XYZ A 
WHERE A.subjects in (select Subject from StudentSubjects where [email protected])