【发布时间】:2016-05-24 05:33:48
【问题描述】:
我希望简化下面的查询,但我无法解决替代解决方案,但我认为必须有一个可用的解决方案。
目标是从 Col_C 中检索 Col_D。 如果 Col_D 返回 NULL,我想从 Col_B 获取 Col_D。 如果返回 NULL,则再次上梯并从 Col_A 获取 Col_D。但仅在 Col_B 和 Col_C 为 NULL 的情况下。
表格
Table_A
Col_A Col_B Col_C Col_X
L000 3200 3220 0000
Table_B
Col_A Col_B Col_C Col_D
L000 NULL NULL 3256
L000 3200 NULL 6483
L000 3200 3210 7213
L000 3200 3220 NULL
L000 3200 3230 9462
查询
DECLARE @X nvarchar(4) = '0000'
DECLARE @A nvarchar(4), @B nvarchar(4), @C nvarchar(4)
SELECT @A = Col_A, @B = Col_B, @C = Col_C FROM [Table_A]
WHERE [Col_X] = @X
SELECT COALESCE(
(SELECT [Col_D] FROM [Table_B] WHERE Col_C = @C AND Col_B = @B AND Col_A = @A),
(SELECT [Col_D] FROM [Table_B] WHERE Col_C IS NULL AND Col_B = @B AND Col_A = @A),
(SELECT [Col_D] FROM [Table_B] WHERE Col_C IS NULL AND Col_B IS NULL AND Col_A = @A)
) AS Col_D
预期输出
Col_D
6483
编辑:添加 Table_A 和预期输出
【问题讨论】:
-
“从 Col_C 获取 Col_D”是什么意思?所有这些都是 Table_B 中的列对吧?
-
你能包含预期的输出吗?
-
检索 Col_D 值,其中 Table_B.Col_C = Table_A.Col_C。 @n8wrl 这有帮助吗?
-
@CodeDifferent 添加了 Table_A 和预期输出以进行澄清
标签: sql sql-server coalesce