自动执行基于另一列值的唯一 ID 归因过程
Automate the process of atributing an unique ID based on another column value
我有一个数据库,其中存储了一个默认 ID 为 100 的列和另一个在 SQL 中具有重复字符串值的列。像这样:
100 BEYONDIFUL !
100 BEYONDIFUL !
100 BEYONDIFUL !
100 BEYONDIFUL !
100 JAGUAR
100 JAGUAR
100 JAGUAR
100 JAGUAR
...
之前,当我想将 ID 列更新为唯一 ID 时,我会这样做:
UPDATE table
SET dbo.table.Id = '01'
WHERE dbo.table.Value LIKE 'THE SENIOR'
所以它会是这样的:
01 BEYONDIFUL !
01 BEYONDIFUL !
01 BEYONDIFUL !
01 BEYONDIFUL !
02 JAGUAR
02 JAGUAR
02 JAGUAR
02 JAGUAR
...
但是,这对于非常大的数据库来说并不实用,因为必须对值列中的每个字符串执行此操作。
我怎样才能使它自动进行,以便为每个唯一值(以及重复值)分配一个介于 01 和 n 之间的 ID(n = 不同值的数量)?
您可以使用 row_number
生成您的 ID 值并像这样更新。没有说明应该如何应用编号,这只是根据字母顺序分配编号。
update t set t.Id=v.id
from Table t
join (
select [value], Row_Number() over (order by [value]) Id
from Table group by [value]
)v on v.[value]=t.[value]
我有一个数据库,其中存储了一个默认 ID 为 100 的列和另一个在 SQL 中具有重复字符串值的列。像这样:
100 BEYONDIFUL !
100 BEYONDIFUL !
100 BEYONDIFUL !
100 BEYONDIFUL !
100 JAGUAR
100 JAGUAR
100 JAGUAR
100 JAGUAR
...
之前,当我想将 ID 列更新为唯一 ID 时,我会这样做:
UPDATE table
SET dbo.table.Id = '01'
WHERE dbo.table.Value LIKE 'THE SENIOR'
所以它会是这样的:
01 BEYONDIFUL !
01 BEYONDIFUL !
01 BEYONDIFUL !
01 BEYONDIFUL !
02 JAGUAR
02 JAGUAR
02 JAGUAR
02 JAGUAR
...
但是,这对于非常大的数据库来说并不实用,因为必须对值列中的每个字符串执行此操作。
我怎样才能使它自动进行,以便为每个唯一值(以及重复值)分配一个介于 01 和 n 之间的 ID(n = 不同值的数量)?
您可以使用 row_number
生成您的 ID 值并像这样更新。没有说明应该如何应用编号,这只是根据字母顺序分配编号。
update t set t.Id=v.id
from Table t
join (
select [value], Row_Number() over (order by [value]) Id
from Table group by [value]
)v on v.[value]=t.[value]