sql - 如何用下一行中的值替换空值
问题描述
我的 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#
解决方案
下一个方法可能会有所帮助。您需要额外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
推荐阅读
- javascript - 悬停效果在画布 HTML5 内的路径上
- android - INSTALL_FAILED_UPDATE_INCOMPATIBLE:包 com.beeclear.english 签名与之前安装的版本不匹配
- c++ - 如何访问指向指针向量的指针向量数组中的转发列表以转发指向对象的指针列表?
- c++ - (C++) 我似乎无法多次运行我的 for 循环。难道我做错了什么?
- docker - Docker 停止响应并出现错误“超出上下文期限”
- mysql - mysql join没有返回所需的结果
- algorithm - Hackerrank 上组织球容器问题的解决方案逻辑
- python-3.x - 一个程序来计算最少数量的笔记,这些笔记将结合起来给出卢比。ñ?
- java - 从内部列表中删除项目 - 没有得到 ConcurrentModificationException
- typescript - 连续的承诺,声明的方式。如何?