SQL Server 将 NULL 替换为列的长度
Posted
技术标签:
【中文标题】SQL Server 将 NULL 替换为列的长度【英文标题】:SQL Server replace NULLs with the length of the column 【发布时间】: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 行会发生什么?
【参考方案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
【讨论】:
以上是关于SQL Server 将 NULL 替换为列的长度的主要内容,如果未能解决你的问题,请参考以下文章