0

私はこれをなんとか取得できました: TSQLの最初の列のエントリの終わりを取得するにはどうすればよいですか?

更新されたデータは次のとおりで、最後のレコードも更新されました。

Service; Sequence; EndSequence  
A, 2089697; 2089737
B, 2089738; 2089837
C, 2089838; 2090367
D, 2090368; 2090399
E, 2090400; 2090500

次に、IDのシーケンスの開始と終了の開始に基づいて、100万件のレコードが含まれるマスターテーブルを更新します。私はカーソルを介してこれを行うことができますが、私は通常のクエリを介して行うことを好みます。

ところで、私はSQL2005を使用しています。

次のようなマスターテーブル:

ID; Value; Service
2089697; 23; null
...
2090500; 12; null

したがって、結果は次のようになります。

ID; Value; Service
2089697; 23; A
... 
2089737; 45; A
2089738; 45; B
...
2089837; 34; B 
2089838; 23; C
...

ありがとう

4

1 に答える 1

1

ここには複数のオプションがあります。

  1. 相関サブクエリ:

    UPDATE MasterTable
    SET Service = (
      SELECT s.Service
      FROM SequenceTable s
      WHERE MasterTable.ID BETWEEN s.Sequence AND s.EndSequence
    )
    WHERE Service IS NULL
    ;
    
  2. 内部結合:

    UPDATE MasterTable
    SET Service = s.Service
    FROM SequenceTable s
    WHERE MasterTable.Service IS NULL
      AND MasterTable.ID BETWEEN s.Sequence AND s.EndSequence
    ;
    

    代替構文:

    UPDATE m
    SET Service = s.Service
    FROM MasterTable m
    INNER JOIN SequenceTable s
      ON m.ID BETWEEN s.Sequence AND s.EndSequence
    WHERE m.Service IS NULL
    ;
    

SequenceTableどちらのオプションも、範囲が重複しないことを前提としています。

于 2013-03-04T07:03:26.670 に答える