【问题标题】:SQL Server replace NULLs with the length of the columnSQL Server 将 NULL 替换为列的长度
【发布时间】:2019-10-31 09:42:18
【问题描述】:

有一张桌子

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

我已经谷歌了,但不知道如何制作它

【问题讨论】:

  • 列的长度怎么称呼?
  • lenght of the column 是什么意思?
  • 您的意思是要在 id 列中添加某种行号?
  • 列的“长度”是什么意思? id 看起来像数字数据类型,所以它没有“长度”(字符串类型用长度声明)。这看起来更像是您想为 row 编号,即 ROW_NUMBER()
  • 如果后来有人删除了 foo3 行会发生什么?

标签: sql sql-server tsql sql-update window-functions


【解决方案1】:

正如 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

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2022-11-22
    • 2013-05-26
    • 2013-08-03
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多