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

Динамично завъртане на таблица Oracle

Това може да стане динамично по следния начин. Първо, ето статичната версия на заявката, за да можете да видите окончателния sql:

изберете c_id, p_id, max(случай, когато r_key='KEY1', след това r_value край) KEY1, max(случай, когато r_key='KEY2' след това r_value край) KEY2, max(случай, когато r_key='KEY3' след това r_value end) KEY3, max(случай, когато r_key='KEY4', след това r_value край) KEY4, max(случай, когато r_key='KEY5', след това r_value край) KEY5 от s_projectrolesgroup от c_id, p_id 

Вижте SQL Fiddle с демонстрация

След това, за да направите това динамично, можете да създадете следната процедура:

СЪЗДАВАЙТЕ ИЛИ ЗАМЕНЕТЕ процедурата dynamic_pivot(p_cursor in out sys_refcursor)като sql_query varchar2(1000) :='изберете c_id, P_id'; започнете за x в (изберете различен r_key от s_projectroles, подредете по 1) цикъл sql_query :=sql_query || ' , max(случай, когато r_key ='''||x.r_key||''', след което r_value край) като '||x.r_key; dbms_output.put_line(sql_query); краен контур; sql_query :=sql_query || ' от s_projectroles група от c_id, p_id'; отворете p_cursor за sql_query; край;/ 

След това, за да го изпълните:

променлива x refcursorexec dynamic_pivot(:x)print x 

Резултатът е същият:

<предварителен код>| C_ID | P_ID | КЛЮЧ1 | КЛЮЧ2 | КЛЮЧ3 | КЛЮЧ4 | КЛЮЧ5 |------------------------------------------------ ----------------| (нула) | (нула) | VALUE1 | СТОЙНОСТ2 | СТОЙНОСТ3 | (нула) | (нула) || 2 | 2 | (нула) | (нула) | (нула) | СТОЙНОСТ4 | (нула) || 2 | 3 | (нула) | (нула) | (нула) | (нула) | VALUE5 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Конфигуриране на Pentaho Data Integration за използване на Oracle Wallet за Oracle Cloud

  2. Как да извлечете данни от две колони във формат A,B в Oracle

  3. Списък на езиците, поддържани от Oracle Database

  4. Как да конвертирате десетичен в шестнадесетичен с помощта на TO_CHAR() в Oracle

  5. променете колоната за отпадане на таблицата в базата данни на Oracle