【发布时间】:2021-05-18 17:04:30
【问题描述】:
我已经搜索、搜索、测试和测试,但我似乎找不到答案。
这是设置。我有 4 个参数可以传入:
- 匹配表中的列
- 参数和表列为空
- 参数不匹配,但关联的表列为空
我试过了:
-
PCN = ( CASE WHEN PCN = @group THEN @PCN 当 PCN 为 NULL 时,则为 NULL 结束)
- 处理,2. 不处理,3. 不处理
-
(PCN=@PCN 要么 PCN 为空)
- 不处理,2.不处理 3.不处理
-
(IsNull(PCN,'none') = IsNull(@PCN,'none'))
- 把手,2.把手,3.不把手
由于最后一个是处理场景 3 的唯一一个,这里有关于那个的更多细节。
DECLARE @bin varchar(6) = '123456'
, @PCN varchar(50) = 'abc'
, @Group varchar(50) = '0.0'
, @NDC = '01234567891'
select * from dbo.Insurance
WHERE (IsNull([Group],'none') = IsNull(@group,'none'))
and (IsNull(PCN,'none') = IsNull(@PCN,'none'))
and (IsNull(BIN,'none') = IsNull(@bin,'none'))
and (IsNull(NDC,'none') = IsNull(@NDC,'none') )
order by [Group] desc, PCN desc, BIN desc, NDC;
此查询不返回任何结果。我的期望是返回 Bin、Group 和 NDC 匹配且 PCN 为 NULL 的行。非常感谢您提供的任何见解!
更新:
| RowId | BIN | PCN | Group | NDC |
|---|---|---|---|---|
| 1 | 123456 | abc | 0.0 | 01234567891 |
| 2 | 123456 | NULL | 0.0 | 01234567891 |
- 场景 1 - PCN 列 = PCN 变量,应该返回 rowID 1
- 场景 2 - PCN 列和 PCN 变量为空,应返回 rowID 2
- 场景 3 - PCN 变量 = 123,应该返回 rowID 2
【问题讨论】:
-
请以文本形式提供示例数据和所需输出
-
您为什么使用不受支持的 SQL Server 版本?
-
也许我遗漏了一些东西,但我认为您想要
([Group] = @Group OR [Group] IS NULL)并且对于其他标准也是如此。 -
@DanGuzman 原来就是这样 - 它不适用于第一种或第二种情况。它返回的行太多。
-
@GordonLinoff 我不是 DBA,也不是负责做出此类决定。
标签: sql sql-server-2008 where-clause