Oracle
 sql >> база данни >  >> RDS >> Oracle

множествен случай SQL заявка извлича един ред като множество колони

В Oracle 11.1 и по-нови можете да използвате UNPIVOT оператор. Ако имате голям обем данни, това ще осигури значително подобрение във времето за изпълнение, тъй като изисква четене на таблицата само веднъж, вместо три пъти с всякакъв вид UNION ALL подход.

Промених името на колоната (в изхода) от date към dt тъй като ДАТА е запазена дума в Oracle. type не е много по-добре (това е ключова дума, но не е запазена); най-добре е да го избягвате също. Също така третирах вашите дати като низове, когато създадох тестовите данни, но работи по същия начин с датите.

with клаузата не е част от решението (не я копирайте и поставяйте сляпо със заявката); Добавих го само за тестови цели.

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. Разбор на JSON данни от CLOB поле с помощта на PL/SQL

  2. Oracle.ManagedDataAccess.EntityFramework - ORA-01918:потребител 'dbo' не съществува

  3. Как да направите заявка за определен ден от месеца в Oracle

  4. Как да използвате виртуален индекс в Oracle Database

  5. Присъединяване на вложен цикъл в Oracle 11g