2016-12-29 1 views
0

데이터를 채워야하는 2 개의 PK 열이있는 테이블이 있습니다. 첫 번째 열 "ID"가 이미 채워져 있습니다. 아래 예제 에서처럼 "SeqNum"열을 생성하고 채울 필요가 있습니다. 분명히 동일한 ID와 동일한 레코드에서 동일한 SeqNum이 될 수는 없습니다. 왜냐하면 두 ID가 모두 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) 

어떤 도움은 매우 환영합니다. 어쩌면 반복해야합니까?

예 출력 I이 필요합니다 제가 질문을 이해한다면 우리는이 SQL 서버 또는 PostgreSQL을 다음 요한의 대답은 것입니다 가정하면

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

잘 맞는 것 멋지게 맞추기. – 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

예! 고맙습니다! 그것은 내가 필요한 것입니다! – zanq

+0

@ 잔크 도와 드리겠습니다. Window Functions로 편안하게 지낼 수있는 시간은 충분할 것입니다. 그들은 값을 헤아릴 수 없다. 건배 –