私の批判は、あなたのテーブルのデザインが正規化されておらず、あまりきれいではないと言うことに限定しますが、あなたにはあなたの理由があると思います。私は通常、DECODEを集計列と組み合わせて使用し、キー(この場合は疑似キー、trunc(ID / 100))でグループ化することにより、これらの「ローテーション」クエリを実行します。タプルを使用する更新構文と組み合わせます。
UPDATE Foo
SET (a, b, c, d)
= (w, x, y, z);
そしてあなたは得る:
UPDATE KeyMap
SET
( key1
, key2
, key3
, key4
...
, key99
)
= ( SELECT MAX(decode(mod(ID, 100), 1, Key, NULL))
, MAX(decode(mod(ID, 100), 2, Key, NULL))
, MAX(decode(mod(ID, 100), 3, Key, NULL))
, MAX(decode(mod(ID, 100), 4, Key, NULL))
...
, MAX(decode(mod(ID, 100), 99, Key, NULL))
FROM Source
WHERE Trunc(Source.ID / 100) = KeyMap.batchId
GROUP BY Trunc(Source.ID / 100)
)
WHERE BatchId = <x>;