Для динамически генерируемых результатов вам нужно некоторое динамическое решение 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
появляется необходимо выполнить процедуру, прежде чем выбрать из поля зрения.
Это называется поворот, не так ли? –