我们在Access(或SQL)中有一个表,它有一个非unqiue的系统密钥
同一个表中有一列需要具有自动递增值,但仅适用于同一ID的每个记录。对于下一个ID,自动增量需要再次从1开始。
e.g
System Key IncrementingField
1 1
1 2
1 3
1 4
2 1
2 2
2 3
3 1
3 2
3 3
4 1
5 1
5 2
我被要求写一个函数或声明或其他东西来做这个,但我不知道从哪里开始。
答案 0 :(得分:0)
对于SQL Server,您可以将ROW_NUMBER()
与适当的分区一起使用:
row_number() over (partition by [System Key] order by [System Key]) AS [IncrementingField]
这是一个示例脚本:
declare @tbl table ([System Key] int)
insert @tbl values (1), (1), (1), (1), (1)
, (2), (2), (2)
, (3), (3), (3)
, (4)
, (5), (5)
select *
, row_number() over (partition by [System Key] order by [System Key]) as IncrementingField
from @tbl
答案 1 :(得分:0)
如果插入SQL Server表,则可以使用窗口函数创建递增值:
select SystemKey
,row_number() over (partition by SystemKey) as IncrementingField
,row_number() over (partition by SystemKey order by SomeCol) as OrderedIncrementingField
from Table
如果您需要使用该ID的先前递增值“取种”此值,则可以使用派生表将其加入SystemKey上的目标表:
with MaxInc as
(
select SystemKey
,max(IncrementingField) as MaxIncrementingField
from Destination
)
select s.SystemKey
,row_number() over (partition by s.SystemKey)
+ isnull(d.MaxIncrementingField,0) as IncrementingField
from Source s
left join MaxInc d
on(s.SystemKey = d.SystemKey)
如果这为您提供了所需的结果集,则可以使用它来进行插入。