【发布时间】:2017-10-08 06:38:32
【问题描述】:
我有以下情况:
有一张这样的表:
Id | Param | Value
------ | ------ | -------------
1 | 1 | One 1
1 | NULL | Null-Value 1
1 | 2 | Two 1
1 | 3 | Three 3
2 | NULL | Nul-Value 2
2 | 2 | Two 2
3 | NULL | Null-Value 3
4 | 1 | One 4
5 | NULL | Null-Vaue 5
6 | NULL | Null-Value 6
我必须编写一个存储过程,因为“Param”的给定输入可为空参数我必须生成一个结果,该结果将包含一个带有 ID 和值的表,结果基于逻辑 -
如果输入参数为空 - 返回所有参数为空值的行
如果参数不为空,则返回在 Param 列中与该参数匹配的行以及所有具有空值作为 Param 的行(对于其他 ID)。
每个 ID 必须只有一个结果。
考虑在 Id 和 Param 列上应用了唯一复合索引。
示例:
Input parameter: 1
Output table:
Id | Value
-- | -------------
1 | One 1
2 | Nul-Value 2
3 | Null-Value 3
4 | One 4
5 | Null-Vaue 5
6 | Null-Value 6
示例 2(让我也包括 Param 列以提高可见性):
Input parameter: 2
Output table:
Id | Param | Value
-- | ----- |-------------
1 | 2 |Two 1
2 | 2 |Two 2
3 | NULL |Null-Value 3
5 | NULL |Null-Value 5
6 | NULL |Null-Value 6
- 我想这将是表与自身的连接,或者使用 cross(或者可能是外部)apply 和一些适当的 where 子句更好......
【问题讨论】:
-
到目前为止你写了什么?你遇到了什么错误?
-
类似这样:从 [dbo].[MyTable] 中选择 t.Id、t.MyParam、t.MyValue t 外部应用(从 MyTable t2 中选择 *,其中 t2.MyParam = @ input 和.Id = t2.Id and t.MyParam = t2.MyParam) mt where (mt.MyParam = @ input and t.MyParam is not null) or t.MyParam is null 但它也返回 Id 1 的 NULL 值(休息没问题)
-
外部应用让我哭了。
-
我们没有在标题中加上“SOLVED”。特别是当所选答案是如此糟糕时。 span>
标签: sql sql-server database tsql stored-procedures