Case 语句有助于从多个连接中替换 null
Case statement help for replacing null from multiple joins
所以我有以下情况,如果 jl 名称没有 n/a,我希望它来自同一列。如果有 n/a 我想查看这个子查询并找到最近的 jl 名称。但是如果 crecent.jl 名称为空,我想从另一个左连接子查询中提取它,该子查询从 temprosRecent.[JL 名称] 中提取最后一条可用记录。当我测试它时,我在 temprosRecent.[JL name] 中找到了记录
单独但在我下面的主要查询案例语句中,我仍然得到 null 作为记录。是因为我的案件的顺序吗?我尝试多次切换订单,但没有成功?
> ,CASE
>
> WHEN EF.[JL name]!='N/A' then EF.[JL name]
>
> WHEN EF.[JL name]='N/A' THEN cRecent.[Jl_NAME]
>
> when cRecent.[Jl_NAME] IS null then temprosRecent.[JL name]
> end as [NCW-Jl combo]
我正在使用 sql 2012.
您应该在 when
子句中使用额外的条件并像这样重新排序:
,CASE
WHEN EF.[JL name]!='N/A' then EF.[JL name]
when cRecent.[Jl_NAME] IS null and EF.[JL name]='N/A' then temprosRecent.[JL name]
WHEN EF.[JL name]='N/A' THEN cRecent.[Jl_NAME]
end as [NCW-Jl combo]
以下代码处理 'N/A'
情况,然后在 EF.[JL name] is NULL
时默认 returning temprosRecent.[JL name]
,这是唯一剩下的可能性。请注意,如果 temprosRecent.[JL name]
为空,它仍可能 return 为空。
使用 coalesce
处理 cRecent.[Jl_NAME]
为 null 和 returning temprosRecent.[JL name]
的可能性。
CASE
WHEN EF.[JL name] != 'N/A' then EF.[JL name]
WHEN EF.[JL name] = 'N/A' THEN Coalesce( cRecent.[Jl_NAME], temprosRecent.[JL name] )
ELSE temprosRecent.[JL name]
end as [NCW-Jl combo]
是的,顺序很重要。结果将来自第一个匹配条件。请注意,短路是 not 保证的。如果表达式有副作用或可能产生错误,例如除以零,即使案例列在匹配案例之后,也可能发生这种情况。
所以我有以下情况,如果 jl 名称没有 n/a,我希望它来自同一列。如果有 n/a 我想查看这个子查询并找到最近的 jl 名称。但是如果 crecent.jl 名称为空,我想从另一个左连接子查询中提取它,该子查询从 temprosRecent.[JL 名称] 中提取最后一条可用记录。当我测试它时,我在 temprosRecent.[JL name] 中找到了记录 单独但在我下面的主要查询案例语句中,我仍然得到 null 作为记录。是因为我的案件的顺序吗?我尝试多次切换订单,但没有成功?
> ,CASE
>
> WHEN EF.[JL name]!='N/A' then EF.[JL name]
>
> WHEN EF.[JL name]='N/A' THEN cRecent.[Jl_NAME]
>
> when cRecent.[Jl_NAME] IS null then temprosRecent.[JL name]
> end as [NCW-Jl combo]
我正在使用 sql 2012.
您应该在 when
子句中使用额外的条件并像这样重新排序:
,CASE
WHEN EF.[JL name]!='N/A' then EF.[JL name]
when cRecent.[Jl_NAME] IS null and EF.[JL name]='N/A' then temprosRecent.[JL name]
WHEN EF.[JL name]='N/A' THEN cRecent.[Jl_NAME]
end as [NCW-Jl combo]
以下代码处理 'N/A'
情况,然后在 EF.[JL name] is NULL
时默认 returning temprosRecent.[JL name]
,这是唯一剩下的可能性。请注意,如果 temprosRecent.[JL name]
为空,它仍可能 return 为空。
使用 coalesce
处理 cRecent.[Jl_NAME]
为 null 和 returning temprosRecent.[JL name]
的可能性。
CASE
WHEN EF.[JL name] != 'N/A' then EF.[JL name]
WHEN EF.[JL name] = 'N/A' THEN Coalesce( cRecent.[Jl_NAME], temprosRecent.[JL name] )
ELSE temprosRecent.[JL name]
end as [NCW-Jl combo]
是的,顺序很重要。结果将来自第一个匹配条件。请注意,短路是 not 保证的。如果表达式有副作用或可能产生错误,例如除以零,即使案例列在匹配案例之后,也可能发生这种情况。