1

既存のデータを新しいデータ テーブルに転送したいと考えています。

置換のあるテーブルがあります:-ID-currentItemId-formerItemId-contentId

同じコンテンツに対して、currentItemId と 以前のItemId の組み合わせに対して複数のエントリがある可能性があります。

今の様子をお見せしましょう:

ID_T1   currentItemId          formerItemId contentId
1    100           200          300
2    100           200          301
3    100           200          302
4    105           201          303
5    105           201          304
6    110           205          320
7    111           206          321
8    120           204          322
9    130           208          323
10   130           208          324

ここで、formerItemId と currentItemId の組み合わせごとに TOP ID を選択したいと思います。

ID  ID_T1 contentId
1    1    300
2    1    301
3    1    302
4    4    303
5    4    304
6    6    320
7    7    321
8    8    322
9    9    323
10   9    324

両方のテーブルには、タイムスタンプとその他のデータも含まれています。例をわかりやすくするために、それを含めていません。

自己結合 (成功なし)、ネストされた選択 (元の組み合わせに対して正しい値が得られますが、繰り返されず、他のレコードの ID に NULL が返されます) を試しましたが、何も機能していないようです。次のようなものを試しました:

SELECT di1.ID,
    (SELECT TOP(1) di1.ID
        FROM TABLE
        WHERE
        di1.currentItemtId = di2.currentItemtId AND di1.formerItemId = di1.formerItemId
        ) AS repeat
  ,di2.deleteItemId
  ,di1.currentitemtId
  ,di1.formerItemId
  ,di1.contentId

  FROM Table di1
  LEFT JOIN 
    Table di2 ON di1.ID = di2.ID

しかし、この方法では ID は繰り返されません。通常の選択と同じ ID の値を取得します。

SQL Server 2008 を使用しています。

どんな助けでも大歓迎です。

4

1 に答える 1

2

してみてください:

SELECT 
    MIN(ID) OVER (PARTITION BY currentItemId, formerItemId) ID, 
    currentItemId,
    formerItemId, 
    contentId 
FROM YourTable

SELECT 
    ID,
    MIN(ID) OVER (PARTITION BY currentItemId, formerItemId) ID_T1,
    contentId 
FROM YourTable
于 2013-10-18T06:26:31.513 に答える