SQL Server用列的长度替换NULL

时间:2019-10-31 09:42:18

标签: sql sql-server

有一张桌子

foo   bar   id
foo1  bar1  NULL
foo2  bar2  NULL
foo2  bar2  NULL
foo3  bar3  NULL
foo4  bar4  NULL
foo4  bar4  NULL

我需要将NULL值替换为1,2,3等列的长度

foo   bar   id
foo1  bar1  1
foo2  bar2  2
foo2  bar2  3
foo3  bar3  4
foo4  bar4  5
foo4  bar4  6

我已经用Google进行搜索,但没有获得如何实现

1 个答案:

答案 0 :(得分:3)

正如jarlh所评论的那样,您似乎正在尝试为id列依次分配foo,然后是bar的递增编号:

select 
    foo,
    bar,
    case when id is null then row_number() over(order by foo, bar) else id end id
from mytable

如果您正在寻找更新:

with cte as (
    select 
        foo,
        bar,
        id,
        row_number() over(order by foo, bar) rn
    from mytable
)
update cte set id = rn
where id is null