2016-12-29 10 views
0

私は移入する必要のある2つのPK列を持つテーブルを持っています。最初の列「ID」にはすでに値が設定されています。下の例のように、「SeqNum」列にintを生成して設定する必要があります。明らかに同じIDと同じレコード内に同じ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幸せに助けてください。窓関数を使いこなすには、時間を割く価値があります。彼らは非常に貴重なことができます。乾杯 –

関連する問題