首页 > 解决方案 > 如何用下一行中的值替换空值

问题描述

我的 sql 查询代码需要支持。我必须用下一行中的非空值替换列中的空值。

作为示例,我们可以使用以下代码:

declare   @value table (r# int, value varchar(15))
insert into @value ( r#, value ) values
 (1, NULL   ) ,
 (2, 'January'), 
 (3, 'February' ), 
 (4, NULL    ),
 (5, 'March'  ),
 (6, NULL    ),
(7, Null  ),
(8, 'December' ),
(9, Null ),
(10, Null  ),
(11, Null  ),
(12, 'November' ),
(13, Null )
select * from @value

当我使用前导函数时,我得到了这个值,但它不适用于 NULL。我需要的是得到:

1 January
2 January
3 February
4 March
5 March
6 December
7 December
8 December
9 November
10 November
11 November
12 November
13 NULL

来自我的查询:

SELECT r#, 
  value
 ,case when value is null  then Lead(value) OVER ( order by  r#  asc) else value end as RESULT 
FROM @value
order by r#

我有:在此处输入图像描述

标签: sqlsql-server

解决方案


下一个方法可能会有所帮助。您需要额外APPLY的运算符来查找第一个没有NULL值的记录:

T-SQL:

SELECT v1.[r#], COALESCE(v1.[value], v2.[value]) AS [value]
FROM @value v1
OUTER APPLY (
   SELECT TOP 1 [Value]
   FROM @value 
   WHERE (v1.[r#] < [r#]) AND [value] IS NOT NULL
) v2

输出:

r#  value
1   January
2   January
3   February
4   March
5   March
6   December
7   December
8   December
9   November
10  November
11  November
12  November
13  NULL

推荐阅读