在SQL Server上。
我正在导入一个如下所示的表:
ForeignID || Detail
ID1 || detail1
ID1 || detail2
ID1 || detail3
ID2 || detail1
ID3 || detail1
ID3 || detail2
进入一个看起来像这样的新表:
ForeignID || ItemNo || Detail
ID1 || 1 || detail1
ID1 || 2 || detail2
ID1 || 3 || detail3
ID2 || 1 || detail1
ID3 || 1 || detail1
ID3 || 2 || detail2
如何自动生成“ItemNo”列值? 它们应该是一个自动递增的整数,只要ForeignID发生变化就会重置。 ForeignID和ItemNo将充当新表的复合主键。
能够在INSERT INTO - SELECT过程中执行此操作会很棒。否则,单独的查询也会起作用。
答案 0 :(得分:2)
对于ROW_NUMBER来说,这是一项简单的任务:
insert into target
select
ForeignID
,row_number()
over (partition by ForeignID order by Detail)
,Detail
from source
答案 1 :(得分:0)
您可以使用行号进行此操作,如下所示:
insert into ...
select
ForeignID,
Detail,
row_number() over (partition by ForeignID order by Detail) as RowNum
order by
ForeignID,
Detail
每次ForeignID更改时,rownum都会开始编号