sql-server - TSQL 查询 - 如何让 WHERE 条件“加起来”?
问题描述
编辑3:
我有下表:
物品 | 内部制造 | 购买 | 外包 |
---|---|---|---|
一个 | 0 | 1 | 0 |
乙 | 1 | 0 | 0 |
C | 0 | 0 | 1 |
D | 1 | 1 | 0 |
乙 | 0 | 1 | 1 |
用户希望按属性过滤该数据。过滤“内部制造”= 1 应仅显示“内部制造”= 1 的项目。将“purchasing”= 1 的过滤器添加到第一个过滤器应显示所有可以内部制造或购买的物品。为“外包”添加另一个过滤器也应该显示外包的项目。
但是将任何过滤器设置为 0 意味着我不想看到该属性为真的结果。
不为属性设置过滤器意味着:我不关心该属性具有哪个值。
EDIT2: 更多说明
Var1= NULL, Var 2 = NULL, Var3 = NULL
允许所有结果Var1= 1, Var 2 = NULL, Var3 = NULL
Col1 必须为 1, Col2 或 col3 可以是任意值Var1= 0, Var 2 = NULL, Var3 = NULL
Col1 必须为 0, Col2 或 col3 可以是任意值Var1= 1, Var 2 = 1, Var3 = NULL
不允许有 (0,0, ANY) 的结果。(1,1,ANY) (1,0,ANY) (0,1,ANY) 是允许的Var1= 1, Var 2 = 1, Var3 = 1
结果为 (0,0,0) 是不允许的。可能的结果 (1/0,1/0, 1/0), (1,1,1)Var1= 0, Var 2 = 1, Var3 = 1
Col 1 必须为 0,可能的结果 (0,1/0,1/0),不允许:(0,0,0)Var1= 0, Var 2 = 0, Var3 = 1
Col 1 必须为 0,Col2 必须为 0,Col3 必须为 1。可能的结果 (0,0,1)Var1= 0, Var 2 = 0, Var3 = 0
Col 1 必须为 0,Col2 必须为 0,Col3 必须为 0。可能的结果 (0,0,0)
我强调了困难的部分。值 0 和 1 之间的行为存在差异。不过,我无法更改该逻辑。它必须以这种方式工作。
我有 3 个变量:@var1, @var2, @var3
对应于 3 columns @col1, @col2, @col3
。每列的值为 1 或 0,每个 var 的值可以为 0,1 或 NULL。我的陈述看起来像这样:
SELECT * FROM tbl a
((a.col1 = @var1) OR @var1 IS NULL) AND
((a.col2 = @var2) OR @var2 IS NULL) AND
((a.col3 = @var3) OR @var3 IS NULL)
解决方案
只需添加n列的值并验证添加是否 >= 1