0

マイナーチェンジで 3 回書かれたスカラー関数があります。これらの 3 つの機能を 1 つの機能に統合する予定です。

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) しかなく、固定科目を持っています。これらの 3 つの関数を 1 つにマージするにはどうすればよいですか?

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

誰でも考えられるより良い解決策はありますか?ありがとう、

4

1 に答える 1

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 StudentID=@StudentID)
于 2013-03-01T14:35:15.777 に答える