SQL生成序列号
我有一个包含2个PK列的表,需要填充。第一列“ID”已经填充,我需要生成“SeqNum”列并用int填充,如下面的示例中所示。显然,同一条记录中不可能有相同的SeqNum和相同的ID,因为它们都是PK(我相信你知道我的意思)。我怎样才能做到这一点 这是一个简单的查询,如下所示: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
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很乐意帮忙。花时间熟悉窗口功能是值得的。它们可以是无价的。干杯