2016-12-29 98 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函數來說,這將非常值得您花時間。它們可以是無價的。乾杯 –