2016-12-29 11 views
0

У меня есть таблица с 2 столбцами PK, которые мне нужно заполнить. Первый столбец «ID» уже заполнен, мне нужно сгенерировать и заполнить столбец «SeqNum» с помощью int, как в моем примере ниже. Очевидно, не может быть одного и того же SeqNum в той же записи, что и тот же ID, потому что они оба PK (я уверен, вы знаете, что я имею в виду). Как я могу это сделать?SQL Generate Sequence Numbers

Это простой запрос так:

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 Счастливые помочь. Было бы неплохо позаботиться о том, чтобы устроиться с функциями окна. Они могут быть бесценными. ура –

 Смежные вопросы

  • Нет связанных вопросов^_^