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

oracle :Име на динамична колона

Тъй като използвате Oracle10g, няма PIVOT функция, така че ще трябва да извършите този тип трансформация с помощта на агрегатна функция с CASE изявление.

Ако стойностите са известни предварително, тогава можете да ги кодирате твърдо в статична версия:

изберете s.ts_location, sum(case when p.tp_name ='apple' then s.ts_sales else 0 end) Apple, sum(case when p.tp_name ='mango' then s.ts_sales else 0 end) ) Манго, sum(case when p.tp_name ='ananaps' then s.ts_sales else 0 end) Pineapplefrom tbl_sales sinner join tbl_products p on s.ts_tp_id =p.tp_idgroup by s.ts_location 

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

Но ако вашите стойности не са известни предварително, тогава трябва да внедрите динамичен sql и в Oracle ще искате да използвате процедура за това:

CREATE OR REPLACE procedure dynamic_pivot(p_cursor in out sys_refcursor)as sql_query varchar2(1000) :='select s.ts_location '; начало за x в (изберете различно tp_name от tbl_products подредете по 1) цикъл sql_query :=sql_query || ' , сума (случай, когато p.tp_name ='''||x.tp_name||''' тогава s.ts_sales край) като '||x.tp_name; dbms_output.put_line(sql_query); крайна линия; sql_query :=sql_query || 'от tbl_sales s inner join tbl_products p на s.ts_tp_id =p.tp_id група от s.ts_location'; dbms_output.put_line(sql_query); отворете p_cursor за sql_query; край;/ 

След това, за да върнете резултатите, които можете да използвате (забележка: ето как го правя в Toad):

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

И двете ще върнат резултата:

<предварителен код>| TS_LOCATION | ЯБЪЛКА | МАНГО | АНАНАС |------------------------------------------| LN | 0 | 10 | 35 || QL | 25 | 0 | 20 || Ню Йорк | 100 | 5 | 50 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да покажа грешки в sqlplus

  2. cx_Oracle - Неуспешно зареждане на DLL:%1 не е валидно Win32 приложение. питон

  3. Oracle PL/SQL - съвети за незабавен изход / конзолен печат

  4. Функция TRUNC(число) в Oracle

  5. изпълнение на незабавна промяна последователност не работи