SQL生成序列号

SQL生成序列号,sql,sql-server,loops,subquery,sequence,Sql,Sql Server,Loops,Subquery,Sequence,我有一个包含2个PK列的表,需要填充。第一列“ID”已经填充,我需要生成“SeqNum”列并用int填充,如下面的示例中所示。显然,同一条记录中不可能有相同的SeqNum和相同的ID,因为它们都是PK(我相信你知道我的意思)。我怎样才能做到这一点 这是一个简单的查询,如下所示: Insert into @TempTable Select A.ID ,1 --not sure what to do here ,B.Col3 --and other columns

我有一个包含2个PK列的表,需要填充。第一列“ID”已经填充,我需要生成“SeqNum”列并用int填充,如下面的示例中所示。显然,同一条记录中不可能有相同的SeqNum和相同的ID,因为它们都是PK(我相信你知道我的意思)。我怎样才能做到这一点

这是一个简单的查询,如下所示:

Insert into @TempTable
Select A.ID
      ,1 --not sure what to do here
      ,B.Col3
      --and other columns
From Blah A Join Blah2 B on B.ID = A.ID
我尝试过类似的方法,但没有成功:

(Select max(ISNULL(SeqNum, 0)) + 1 From @TempTable Where ID = A.ID)
非常欢迎任何帮助。 也许我得绕圈子

我需要的输出示例:

PK  PK
ID  SeqNum
1111    1
1111    2
1111    3
2222    1
2222    2
2222    3
3333    1
4444    1
5555    1
5555    2

如果我理解了这个问题,那么第_Number()行很适合这里

Select ID
       ,SeqNum = Row_Number() over (Partition By ID Order By (Select NULL))
 From  ...

如果我们假设这是SQL server或postgresql,那么John的答案似乎很合适。同意。如果zanq正在查找N个项目的列表,则情况会有所不同。添加了基于公认回答中使用的(非标准)语法的
sql server
标记是!非常感谢。这正是我需要的@zanq很乐意帮忙。花时间熟悉窗口功能是值得的。它们可以是无价的。干杯