2016-12-29 103 views
0

我有一张需要填充2个PK列的表。第一列“ID”已经填充完毕,我需要在下面的例子中用int来生成和填充“SeqNum”列。在相同的记录中显然不能有相同的SeqNum,因为它们都是PK的(我相信你明白我的意思)。我怎样才能做到这一点?SQL生成序列号

它是像这样一个简单的查询:

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 
+0

如果我们假设这是SQL服务器或PostgreSQL然后约翰的答案似乎很好地适应。 – xQbert

+0

同意。如果zanq正在查找N个项目的列表,则会有所不同。 – Kevin

+0

根据接受的答案中使用的(非标准)语法添加'sql-server'标记 –

回答

2

如果我理解这个问题,ROW_NUMBER()会是一个不错的选择这里

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

YES!谢谢!这正是我需要的! – zanq

+0

@zanq乐于助人。对于使用Window函数来说,这将非常值得您花时间。它们可以是无价的。干杯 –