1

我正在使用 SQL Server 2008。我想知道这是否是获得第一个非空日期的最佳代码:

    select actualdate = coalesce((select date1 from table1), (select date2 from table2))
4

2 回答 2

0

您可以IsNull在这种情况下使用。


CoalesceNot Null当你有超过一列来获得价值时应该使用。

例子

select ISNULL((select top 1 OBJECT_ID from sys.objects), 0)
go
select coalesce((select top 1 OBJECT_ID from sys.objects), 0)

单击此处查看 SQL Profiler 阅读


Top在查询中缺少语句,否则您可能会遇到以下错误。

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

于 2012-08-07T17:10:17.083 回答
0

如果您可以使用一些通用 id 连接两个表,则可以使用以下查询。

select @actualdate = CASE WHEN t1.date1 is null then t2.date else t1.date end
from table1 t1 inner join table2 t2
on t1.id=t2.id

如果您在这 2 个表之间没有任何共同的 id,请尝试使用带有 row_number() 的 CTE 来加入 2 个表。

于 2012-08-09T06:16:12.700 回答