gpa がコースのクレジットをスコアで乗算した結果を取得するためのストアド プロシージャがあります。
ALTER PROCEDURE dbo.GpaCreditFromScore
(
@score INT,
@credits INT,
@gpaCredit INT OUTPUT
)
AS
IF (@score < 60)
BEGIN
SET @gpaCredit = 0.0
END
ELSE IF (@score < 62)
BEGIN
SET @gpaCredit = 1.0 * @credits
END
ELSE IF (@score < 65)
BEGIN
SET @gpaCredit = 1.7 * @credits
END
ELSE IF (@score < 67)
BEGIN
SET @gpaCredit = 2.0 * @credits
END
ELSE IF (@score < 70)
BEGIN
SET @gpaCredit = 2.3 * @credits
END
ELSE IF (@score < 75)
BEGIN
SET @gpaCredit = 2.7 * @credits
END
ELSE IF (@score < 80)
BEGIN
SET @gpaCredit = 3.0 * @credits
END
ELSE IF (@score < 85)
BEGIN
SET @gpaCredit = 3.3 * @credits
END
ELSE IF (@score < 90)
BEGIN
SET @gpaCredit = 3.7 * @credits
END
ELSE IF (@score < 95)
BEGIN
SET @gpaCredit = 4.0 * @credits
END
ELSE IF (@score <= 100)
BEGIN
SET @gpaCredit = 4.3 * @credits
END
そして、すべての学生の gpa を計算する別のストアド プロシージャは、単位を乗算します。
ALTER PROCEDURE dbo.ComputeGpa
AS
;WITH x AS
(
SELECT StudentID, Score, rn = ROW_NUMBER() OVER
(PARTITION BY StudentID, CourseID
ORDER BY Semester DESC)
FROM dbo.UndergraduateScoreSet
)
SELECT StudentID, Gpa /* call dbo.GpaCreditFromScore here to get @gpaCredit */
FROM x
WHERE rn = 1
GROUP BY StudentID;
ロジックがかなり複雑なので、これを達成する方法がわかりません。助けてください〜