我有一个SQL Server数据库,其表的字段包含多行的相同值。我想为字段中具有相同值的行添加序列号。例如,如果我的数据是;
Field1
A
A
B
B
B
我想要每行的序列号,如;
Field1 SequenceNumber
A 1
A 2
B 1
B 2
B 3
答案 0 :(得分:0)
您应创建一个新表,否则,如果没有主键或唯一索引,则无法更新表。
create table new_table
(
id int,
field1 char(1)
);
with seqnum as
(
select field1, row_number() over (partition by field1) id
from your_table
)
insert into new_table (id, field1)
values (seqnum.id, seqnum.field1;
现在您可以在(id,field1)
上创建主键或删除old_table并使用旧名称重命名new_table。
如果您的实际表具有唯一索引,则可以使用它来更新它。
答案 1 :(得分:0)
无法为每个组提供自动重置序列号,完全由服务器强制执行。它只能在单行或整个表上本机强制执行约束。
您可以使用相当复杂的触发器执行某些步骤,但随后遇到并发问题。我的建议是简单地在每一行上添加一个日期列。在查询或应用程序使用时,您只需按Field
进行分组,然后按日期列进行排序。这将实现完全相同的事情(将行放在特定的,可数的,通常可分配的位置)。
答案 2 :(得分:0)
我在另一个话题中找到了这个
select Field1
Row_Number() OVER (PARTITION BY Field1 order by Field1) as SequenceNumber
from mytable
order by Field1, SequenceNumber