【发布时间】:2017-09-07 16:11:08
【问题描述】:
我想根据ProductCategory、ProductSubCategory 和YEAR 过滤Items 的数据。我有三个下拉菜单,分别是 ProductCategory、ProductSubCategory 和 YEAR,根据用户选择,我想显示数据。
用户可以根据任何下拉选择过滤数据,并且 id 用户不选择任何内容,那么它应该默认显示所有记录。
我需要编写一个带有 3 个参数的存储过程才能正常工作,我被建议使用以下查询
SELECT *
FROM Products
WHERE (CatID = 0 OR CatID IS NULL)
AND (CatSubID = 0 OR CatSubID IS NULL)
AND (DATEPART(YY, PubDate) = 0 OR DATEPART(YY, PubDate) IS NULL)
这个查询的问题是我没有 Null 值,如果它没有分配给任何类别或子类别并且年份部分永远不会为 NULL 或有 0,我在数据库中有 0,即使我将 0 更改为 null 如果不选择下拉列表中的任何值,它仍然不会获取任何内容
CatID 和CatSubID 列中的0 表示它尚未分配到任何类别,因此我们可以说0 是这些产品的通用类别
表Products数据:
ID Title PubDate Visible CatID CatSubID
------------------------------------------------------------
1 Title 1 2016-11-07 1 7 5
2 Title 2 2012-12-31 1 0 0
3 Title 3 2016-12-19 0 5 0
4 Title 4 2014-11-07 1 7 5
5 Title 5 2015-12-19 1 7 5
6 Title 6 2016-12-19 0 7 5
示例 1:CatID = 7,CatSubID = 5,Year = 2016
结果:
ID Title PubDate Visible CatID CatSubID
------------------------------------------------------------
1 Title 1 2016-11-07 1 7 5
6 Title 6 2016-12-19 0 7 5
示例 2:CatID = 7,CatSubID = 0,Year = 0
结果:
ID Title PubDate Visible CatID CatSubID
------------------------------------------------------------
1 Title 1 2016-11-07 1 7 5
4 Title 4 2014-11-07 1 7 5
5 Title 5 2015-12-19 1 7 5
6 Title 6 2016-12-19 0 7 5
示例 3:CatID = 0,CatSubID = 5,Year = 0
结果:
1 Title 1 2016-11-07 1 7 5
4 Title 4 2014-11-07 1 7 5
5 Title 5 2015-12-19 1 7 5
6 Title 6 2016-12-19 0 7 5
示例 4:CatID = 0,CatSubID = 0,Year = 0
结果:在这种情况下,它应该显示表的所有记录
【问题讨论】:
标签: c# sql sql-server sql-server-2008 stored-procedures