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

truy vấn SQL nhiều chữ hoa chữ thường truy xuất một hàng dưới dạng nhiều cột

Trong Oracle 11.1 trở lên, bạn có thể sử dụng UNPIVOT nhà điều hành. Nếu bạn có một khối lượng lớn dữ liệu, điều này sẽ mang lại sự cải thiện đáng kể về thời gian thực thi, vì nó yêu cầu đọc bảng chỉ một lần, thay vì ba lần với bất kỳ loại UNION ALL nào cách tiếp cận.

Tôi đã thay đổi tên cột (trong đầu ra) từ date thành dt vì DATE là một từ dành riêng trong Oracle. type không tốt hơn nhiều (nó là một từ khóa nhưng nó không được bảo lưu); tốt nhất để tránh nó quá. Tôi cũng coi ngày tháng của bạn là chuỗi khi tôi tạo dữ liệu thử nghiệm, nhưng nó hoạt động giống như ngày tháng.

with mệnh đề không phải là một phần của giải pháp (đừng sao chép và dán nó một cách mù quáng với truy vấn); Tôi đã thêm nó chỉ với mục đích thử nghiệm.

with
     test_data ( ID, VT_Type1, Vt_type2, VT_Type3, Status_1, Status_2, Status_3, 
                                                         Date_1, Date_2, Date_3 ) as (
       select 1, -1, -1,  0, 'X', 'Y', 'Z', '04/12', '05/12', '06/12' from dual union all
       select 2, -1, -1, -1, 'A', 'B', 'C', '06/12', '07/12', '07/10' from dual
     )
select  id, type, status, dt
from    test_data
unpivot ( (vt_type, status, dt) for type in ( (vt_type1, status_1, date_1) as 1,
                                              (vt_type2, status_2, date_2) as 2,
                                              (vt_type3, status_3, date_3) as 3
                                            )
        )
where   vt_type != 0
;

ID  TYPE  STATUS  DT
--  ----  ------  -----
 1     1  X       04/12
 1     2  Y       05/12
 2     1  A       06/12
 2     2  B       07/12
 2     3  C       07/10


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để định dạng loại Khoảng thời gian thành định dạng HH:MM?

  2. Câu lệnh select oracle sql siêu lập trình

  3. Cập nhật với truy vấn Tham gia trong Oracle

  4. Đầu ra ODP.NET Tham số chuỗi không trả về giá trị

  5. Làm thế nào để lấy các hàng từ một bảng nếu tổng số hàng nhiều hơn 10 trong Oracle?