【问题标题】:How can I fill the null values with the values up these nulls如何用这些空值以上的值填充空值
【发布时间】:2018-04-07 14:54:46
【问题描述】:

如何用这些空值下面的值填充空值?

例如,我有一张这样的表:

Mat   Name
123   Jerry
Null  Mary
Null  Sam
456   Matt
Null  Harry
Null  Jin

但应该是这样的:

Mat   Name 
123   Jerry
123   Mary
122   Sam
456   Matt
456   Harry
456   Jin

我可以在 select 语句中实现这一点,还是必须使用函数或存储过程?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

我想你是说

select name, max(value) OVER(ORDER BY name ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) as value

【讨论】:

    【解决方案2】:

    如果您能够将ID 列添加到您的表中(如果您还没有的话)这个查询应该可以工作

    declare @tbl as table (
        id int
        ,mat int
        ,name varchar(15)
    )
    
    insert into @tbl values (1,123, 'Jerry')
    insert into @tbl values (2,NULL, 'Marry')
    insert into @tbl values (3,NULL, 'Sam')
    insert into @tbl values (4,456, 'Matt')
    insert into @tbl values (5,NULL, 'Harry')
    insert into @tbl values (6,NULL, 'Jin')
    
    SELECT
        id
        ,CASE WHEN
            mat IS NULL THEN
                (SELECT TOP 1 mat FROM @tbl WHERE id<T.id AND mat IS NOT NULL ORDER BY id DESC)
            ELSE mat
        END AS mat
        ,name
    FROM @tbl T
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-16
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 2021-09-05
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多