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

Oracle SQL Cross Tab Query

За динамично генерирани резултати ви трябва някакво динамично PLSQL решение, нещо като тази процедура, създаваща изглед v_list_loc :

create or replace procedure p_list_loc is

  v_sql varchar2(32000) := '';

begin

  for c in (select distinct loc from test order by loc) loop
    v_sql := v_sql || '''' ||c.loc|| ''' '||c.loc||',';
  end loop;

  v_sql := 'create or replace view v_list_loc as '
    ||'select * from (select item, loc, stock from test) pivot (sum(stock) '
    ||'for (loc) in ('||rtrim(v_sql, ',')||'))';

  execute immediate v_sql;

end p_list_loc;

В кода на процедурата заменете test с името на вашата маса. Компилирайте тази процедура, стартирайте и изберете резултати от генерирания изглед v_list_loc :

SQL> exec p_list_loc;

PL/SQL procedure successfully completed

SQL> select * from v_list_loc;

ITEM         KS5        KS6
----- ---------- ----------
0001          10         30
0002          10         20

Всеки път, когато нови стойности в колона loc се появява, че трябва да изпълните процедура, преди да изберете от изглед.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Table Function от CTE

  2. Изчислете сумата от продължителност в sql заявка

  3. Oracle:Трябва да избера n реда от всеки k реда на таблица

  4. Вмъкнете дата в Oracle

  5. Каква е разликата между временна таблица и глобална временна таблица в Oracle?