sql >> データベース >  >> RDS >> Oracle

OracleSQLクロスタブクエリ

    動的に生成された結果には、ビューv_list_locを作成するこのプロシージャのような動的PLSQLソリューションが必要です。 :

    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. ORA-01804 OracledbDriverのロード中にエラーが発生しました

    2. SQLサーバーにIPアドレスを格納するための最も適切なデータ型は何ですか?

    3. 生成されたSQLを変数から実行するにはどうすればよいですか?

    4. フォームへの二重投稿を防ぐ方法は何ですか? (PHP)