【发布时间】:2013-09-22 15:19:49
【问题描述】:
在 asp 中,我设置了几个下拉菜单,允许用户根据他们的选择过滤页面上显示的数据。
这些下拉菜单用于数据收集、年级组(例如 11 年级)、科目(例如英语)、教学组和子组。
必须选择数据收集、年份和主题,但教学组和子组可以保持未选择(全选)、单独选择或同时选择。
由于子组下有许多选项,我在 SQL 存储过程中的 where 子句现在很大。以下是几个选项,其中未选择子组或选择了女孩子组或选择了男孩子组。还有很多,但为了简洁起见,我限制了我发布的内容。
我的问题是我可以以任何方式优化此代码还是最简洁?如果您需要更多示例,请告诉我,我会将它们添加到帖子中。
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 sql-server sql-server-2008 query-optimization where-clause