sql >> Databasteknik >  >> RDS >> Oracle

Oracle 10g PL/SQL- Välj resultat som uppdatera kolumnvärden

Jag ska begränsa min kritik till att säga att din bordsdesign inte är normaliserad och inte är särskilt vacker, men jag antar att du har dina skäl. Jag brukar göra dessa "rotations"-frågor genom att använda DECODE kombinerat med en aggregerad kolumn, grupperad efter min nyckel - i det här fallet din pseudo-nyckel, trunc(ID/100). Kombinera det med uppdateringssyntaxen som använder tupler:

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

och du får:

  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. Docker Compose + Spring Boot + Postgres-anslutning

  2. Kategorisera automatisk kompletteringsdata

  3. Vill konvertera från teckenformat till talformat med decimal

  4. hur återställer man databasen i mysql?