在上一个 COALESCE 的另一个值中使用相同的表

Using the same table in another value from previous COALESCE

提问人:AweSomeBody 提问时间:3/4/2023 最后编辑:Thom AAweSomeBody 更新时间:3/4/2023 访问量:115

问:

我有结合了两个表的视图。select 请求的值之一必须位于其中一个表中,另一个值必须具有 null 作为此值。作为解决方案,我使用coalesce

COALESCE(tbl1.Val, tbl2.Val) As Val

我现在正在努力从获取 Val 的同一表中选择下一个值,因为它们在两者中可能不同/NULL。

我在伪中的想法

(if tbl1.Val = NULL then tbl1.Val2 else tbl2.Val2) as Val2

是否可以使用 sql 函数编写它?(IIF、ISNULL、NULLIF,...大概吧?

3 张桌子会有多复杂?

输入

tbl1.Val = NULL,
tbl2.Val = NULL,
tbl3.Val = 'VALUE'

tbl1.Val2 = 'NOT THIS ONE',
tbl2.Val2 = 'NOT THIS ONE',
tbl3.Val2 = 'THIS ONE'

预期

Val     Val2
'Value' 'THIS ONE'

我尝试过这样的结构

IIF(tbl1.Val = NULL, tbl1.Val2, tbl2.Val2)
IIF(ISNULL(tbl1.Val, False), tbl1.Val2, tbl2.Val2)
sql-server null 合并 sql-server-2019

评论

1赞 Stu 3/4/2023
null表示未知或未定义的值;Nothing inc 等于 ;用nullnullis null
0赞 Thom A 3/4/2023
这回答了你的问题吗?为什么 NULL = NULL 在 SQL Server 中计算结果为 false
1赞 Adrian Maxwell 3/4/2023
如果两者都 tbl1.瓦尔,tbl2。Val 是 NULL 您是否要求从“下一个”行中获取值?请说明2行或更多行样本数据,然后说明该数据的预期结果。顺便说一句,如果它确实涉及“下一个”行,我们需要知道确定“下一个”需要什么顺序
1赞 Adrian Maxwell 3/4/2023
coalesce()接受 2 个以上的参数并返回第一个非 null 值,例如 将返回 1coalesce(null, null, null, 1)

答:

0赞 Adrian Maxwell 3/4/2023 #1

而不是尝试这样的案例表达式:IIF

CASE WHEN tbl1.Val IS NULL THEN COALESCE(tbl1.Val2, tbl2.Val2) END AS X

CASE WHEN tbl1.Val IS NOT NULL THEN COALESCE(tbl1.Val2, tbl2.Val2) END AS X

您还可以包括例如ELSE

CASE
    WHEN tbl1.Val IS NULL THEN COALESCE(tbl1.Val2, tbl2.Val2) 
    ELSE some-expression-here
END AS X

但该表达式的数据类型必须与tbl1.Val2, tbl2.Val2