sql >> Databáze >  >> RDS >> Oracle

Oracle 10g PL/SQL- Výběr výsledků jako hodnot sloupců aktualizace

Omezím svou kritiku na to, že váš návrh stolu není normalizovaný a není moc hezký, ale předpokládám, že máte své důvody. Obvykle dělám tyto "rotační" dotazy pomocí DECODE kombinovaného s agregovaným sloupcem, seskupením podle mého klíče - v tomto případě vašeho pseudoklíče, trunc(ID/100). Zkombinujte to se syntaxí aktualizace, která používá n-tice:

 UPDATE Foo
    SET (a, b, c, d)
      = (w, x, y, z);

a dostanete:

  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>;


  1. podproces dává chybu. Systém nemůže nalézt uvedený soubor

  2. Jak přimět postgresSQL, aby fungoval na počítači se systémem Windows 7 s django?

  3. Ladění funkce PostgreSQL pomocí pgAdmin

  4. SQLT a dělení