Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle 10g PL / SQL- Chọn kết quả làm giá trị cột cập nhật

Tôi sẽ giới hạn những lời chỉ trích của mình khi nói rằng thiết kế bàn của bạn không được chuẩn hóa và không đẹp lắm, nhưng tôi sẽ cho rằng bạn có lý do của mình. Tôi thường thực hiện các truy vấn "xoay vòng" này bằng cách sử dụng DECODE kết hợp với cột tổng hợp, nhóm theo khóa của tôi - trong trường hợp này là khóa giả của bạn, trunc (ID / 100). Kết hợp điều đó với cú pháp cập nhật sử dụng bộ giá trị:

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

và bạn nhận được:

  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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Java:resultset trống trong khi gọi thủ tục được lưu trữ với con trỏ tham chiếu là OUT

  2. Oracle Sql Loader ORA-01722:số không hợp lệ khi tải tệp CSV với phần cuối dòng Windows

  3. Câu lệnh ACCEPT trong Oracle PL SQL

  4. Oracle sqlSubtract giữa hai ngày

  5. ORACLE NLS_LANG