以下は私の WHERE 句で、(特に 2 つの @subgroup 変数で) 繰り返しが含まれているため、コードを最適化するために何かできることはないかと考えていました。私のコードはそのままで問題なく動作しますが、もっときれいにできれば素晴らしいと思います。まずは簡単な説明。
asp ドロップダウンから入力する 5 つのパラメーターがあります。この質問の目的のために、私はそれらにデータを入力しました:
DECLARE
@DataCollection VARCHAR(50) = '2013/14 - Autumn 1 - Targets',
@StuYear VARCHAR(2) = '11',
@SubjectName VARCHAR(100) ='English',
@TeachingGroup VARCHAR(25) = 'Select All',
@SubGroup VARCHAR(15) = 'FSMYes',
@SubGroup2 VARCHAR(15) = 'SENS'
where ステートメントを使用すると、ドロップダウンの値に基づいて結果セットをフィルター処理できます。
@DataCollection、@StuYear、および @SubjectName はすべて必須であり、ドロップダウンにデフォルト値があります。残りはオプションです。
@subgroup の変数は、ドロップダウンでハードコーディングされた値に基づいて入力されるため、パラメーターが渡され、そのパラメーター値が WHERE 句の条件と一致する場合、特定の db 値がテーブルの特定の列にフィルター処理されます。
ここに私のSQLがあります:
WHERE
[StuYear] = @StuYear AND
[DataCollection] = @DataCollection AND
[Name] = @SubjectName AND (
@TeachingGroup = 'Select All' OR
[TeachingGroup] = @TeachingGroup
) AND (
@SubGroup = 'Select All' OR
Gender = CASE --Gender
WHEN @SubGroup = 'GenF' THEN 'F'
WHEN @SubGroup = 'GenM' THEN 'M'
END
OR
LEFT(ks2av,1) = CASE --Attainer
WHEN @SubGroup = 'High' THEN '5'
WHEN @SubGroup = 'High' THEN '5'
WHEN @SubGroup = 'Middle' THEN '4'
WHEN @SubGroup = 'Low' THEN '3'
WHEN @SubGroup = 'Low' THEN '2'
WHEN @SubGroup = 'Low' THEN '1'
END
OR
PupilPremium = CASE --Pupil Premium
WHEN @Subgroup = 'PPYes' THEN 'Yes'
END
OR
FSM = CASE --Free School Meals
WHEN @Subgroup = 'FSMYes' THEN 'Yes'
END
OR
SEN = CASE --SEN
WHEN @Subgroup = 'SENA' THEN 'A'
WHEN @Subgroup = 'SENP' THEN 'P'
WHEN @Subgroup = 'SENS' THEN 'S'
WHEN @Subgroup = 'SENNo' THEN 'N'
END
OR
(@SubGroup='SENYes' AND SEN IN ('A','P','S')) --SEN Yes
OR
EAL = CASE --English as an Additional Language
WHEN @Subgroup = 'EALYes' THEN 'Yes'
END
OR
LAC = CASE --Looked After Children
WHEN @Subgroup = 'LACYes' THEN 'Yes'
END
OR --Gifted & Talented
GandT = CASE
WHEN @Subgroup = 'GandTYes' THEN 'Yes'
END
OR --Gifted Only
Gifted = CASE
WHEN @Subgroup = 'GiftedYes' THEN 'Yes'
END
OR --Talented Only
Talented = CASE
WHEN @Subgroup = 'TalentedYes' THEN 'Yes'
END
)AND (
@subgroup2 = 'Select All' OR
Gender = CASE --Gender
WHEN @subgroup2 = 'GenF' THEN 'F'
WHEN @subgroup2 = 'GenM' THEN 'M'
END
OR
LEFT(ks2av,1) = CASE --Attainer
WHEN @subgroup2 = 'High' THEN '5'
WHEN @subgroup2 = 'High' THEN '5'
WHEN @subgroup2 = 'Middle' THEN '4'
WHEN @subgroup2 = 'Low' THEN '3'
WHEN @subgroup2 = 'Low' THEN '2'
WHEN @subgroup2 = 'Low' THEN '1'
END
OR
PupilPremium = CASE --Pupil Premium
WHEN @subgroup2 = 'PPYes' THEN 'Yes'
END
OR
FSM = CASE --Free School Meals
WHEN @subgroup2 = 'FSMYes' THEN 'Yes'
END
OR
SEN = CASE --SEN
WHEN @subgroup2 = 'SENA' THEN 'A'
WHEN @subgroup2 = 'SENP' THEN 'P'
WHEN @subgroup2 = 'SENS' THEN 'S'
WHEN @subgroup2 = 'SENNo' THEN 'N'
END
OR
(@subgroup2='SENYes' AND SEN IN ('A','P','S')) --SEN Yes
OR
EAL = CASE --English as an Additional Language
WHEN @subgroup2 = 'EALYes' THEN 'Yes'
END
OR
LAC = CASE --Looked After Children
WHEN @subgroup2 = 'LACYes' THEN 'Yes'
END
OR --Gifted & Talented
GandT = CASE
WHEN @subgroup2 = 'GandTYes' THEN 'Yes'
END
OR --Gifted Only
Gifted = CASE
WHEN @subgroup2 = 'GiftedYes' THEN 'Yes'
END
OR --Talented Only
Talented = CASE
WHEN @subgroup2 = 'TalentedYes' THEN 'Yes'
END
)