在asp中,我设置了几个下拉菜单,允许用户根据选择来筛选页面上显示的数据。SQL优化where条款中的条件
这些下拉列表是数据收集,一年组例如11年,主题例如英语,教学组和一个子组。
数据的采集,年和主题都必须选择,但教学组和子组可以保留不选(全选),单独选择中选出的。
我在哪里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