В asp Я установил несколько выпадающих меню, которые позволяют пользователю фильтровать данные, отображаемые на странице, в зависимости от их выбора.SQL оптимизирует условия в том, где статья
Эти выпадающие списки предназначены для сбора данных, год группы, например, год 11, предмет, например английский, обучающая группа и подгруппа.
Необходимо выбрать набор данных, год и предмет, но обучающая группа и подгруппа могут оставаться невыбранными (выберите все), выбранными индивидуально или оба выбранными.
Мое предложение where в хранимой процедуре SQL теперь огромно из-за множества опций под подгруппой. Ниже приведены несколько вариантов, в которых не выбрана ни одна подгруппа, или выбрана подгруппа девочек, или выбрана подгруппа мальчиков. Их гораздо больше, но ради краткости я ограничил то, что я разместил.
Мой вопрос: могу ли я каким-либо образом оптимизировать этот код или я в самом сжатом виде? Если вам нужно больше примеров, дайте мне знать, и я добавлю их в сообщение.
where
--All
(@TeachingGroup = 'Select All' AND ([StuYear] = @StuYear) AND ([DataCollection] = @DataCollection) AND ([Name] = @SubjectName) AND @Subgroup='Select All'
OR
@TeachingGroup <> 'Select All' AND ([StuYear] = @StuYear) AND ([DataCollection] = @DataCollection) AND ([Name] = @SubjectName) AND ([TeachingGroup] = @TeachingGroup) AND @Subgroup='Select All')
or
--Gender Girls
(@TeachingGroup = 'Select All' AND ([StuYear] = @StuYear) AND ([DataCollection] = @DataCollection) AND ([Name] = @SubjectName) AND Gender =
case when @Subgroup = 'GenF' then 'F' end)
OR
@TeachingGroup <> 'Select All' AND ([StuYear] = @StuYear) AND ([DataCollection] = @DataCollection) AND ([Name] = @SubjectName) AND ([TeachingGroup] = @TeachingGroup) AND Gender = case when @Subgroup = 'GenF' then 'F' end
or
--Gender boys
(@TeachingGroup = 'Select All' AND ([StuYear] = @StuYear) AND ([DataCollection] = @DataCollection) AND ([Name] = @SubjectName) AND Gender =
case when @Subgroup = 'GenM' then 'M' end)
OR
@TeachingGroup <> 'Select All' AND ([StuYear] = @StuYear) AND ([DataCollection] = @DataCollection) AND ([Name] = @SubjectName) AND ([TeachingGroup] = @TeachingGroup) AND Gender = case when @Subgroup = 'GenM' then 'M' end
Этот ответ сработал для меня. Мне также нравится, что у меня есть оба варианта, чтобы попробовать, поэтому я буду рассматривать возможность использования динамического метода sql в будущем, но пока стандартный результат работает нормально. – Matt