Ik zal mijn kritiek beperken om te zeggen dat je tafelontwerp niet genormaliseerd is en niet erg mooi is, maar ik neem aan dat je je redenen hebt. Ik doe deze "rotatie"-query's meestal door DECODE te gebruiken in combinatie met een geaggregeerde kolom, gegroepeerd op mijn sleutel - in dit geval uw pseudo-sleutel, trunc(ID/100). Combineer dat met de update-syntaxis die tupels gebruikt:
UPDATE Foo
SET (a, b, c, d)
= (w, x, y, z);
en je krijgt:
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>;