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

chuyển cột sang hàng oracle

Trong SQL thuần túy , nó sẽ cần nhiều mã hóa vì bạn sẽ phải đặt phạm vi theo cách thủ công vì không có mối quan hệ nào giữa các giá trị và phạm vi cả. Nếu đã có mối quan hệ, bạn có thể sử dụng CASE biểu thức và tạo phạm vi động .

SQL> WITH DATA AS
  2    (SELECT 50 "1-99transval",
  3      90 "100-200transval",
  4      80 "200-300transval",
  5      67 "1-99nontransval",
  6      58 "100-200nontransval",
  7      88 "200-300nontransval"
  8    FROM dual
  9    )
 10  SELECT '1-99' range,
 11    "1-99transval" transval,
 12    "1-99nontransval" nontransval
 13  FROM DATA
 14  UNION
 15  SELECT '100-200' range,
 16    "100-200transval",
 17    "100-200nontransval" nontransval
 18  FROM DATA
 19  UNION
 20  SELECT '200-300' range,
 21    "200-300transval",
 22    "200-300nontransval" nontransval
 23  FROM DATA;

RANGE     TRANSVAL NONTRANSVAL
------- ---------- -----------
1-99            50          67
100-200         90          58
200-300         80          88

Từ cơ sở dữ liệu Oracle 11g phiên bản 1 trở lên, bạn có thể sử dụng UNPIVOT

SQL> WITH DATA AS
  2    (SELECT 50 "1-99transval",
  3      90 "100-200transval",
  4      80 "200-300transval",
  5      67 "1-99nontransval",
  6      58 "100-200nontransval",
  7      88 "200-300nontransval"
  8    FROM dual
  9    )
 10  SELECT *
 11  FROM   DATA
 12  UNPIVOT( (transval,nontransval)
 13  FOR RANGE IN ( ("1-99transval","1-99nontransval") AS '1-99'
 14                ,("100-200transval","100-200nontransval") AS '100-200'
 15                ,("200-300transval","200-300nontransval") AS '200-300'));

RANGE     TRANSVAL NONTRANSVAL
------- ---------- -----------
1-99            50          67
100-200         90          58
200-300         80          88

Ở trên, trong trường hợp của bạn, bạn cần thay thế VỚI mệnh đề với truy vấn hiện tại của bạn dưới dạng truy vấn phụ . Bạn cần đưa các cột khác vào UNION .

Trong PL / SQL , bạn có thể (ab) sử dụng THỰC HIỆN NGAY LẬP TỨC và lấy "phạm vi" bằng cách trích xuất tên cột trong sql động .

Mặc dù, sẽ tốt hơn nhiều nếu bạn sửa đổi / viết lại truy vấn hiện tại mà bạn chưa hiển thị.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tự động hóa các công việc tích hợp dữ liệu IRI với Oracle Job Scheduler

  2. không thể chèn khung dữ liệu vào một bảng tiên tri hiện có

  3. Các kết hợp từ một bảng, được nhóm theo giá trị cột

  4. Oracle SQL để sắp xếp số phiên bản

  5. Cách lên lịch chạy công việc vào thời điểm cụ thể bằng dbms_scheduler