ORACLE 10G 中的 PIVOT
PIVOT in ORACLE 10G
我在 ORACLE 10G 中有以下 table :-
AUTOID PLAN_DATE ITEM_CODE 数量
5 27-04-16 F10000010 10
7 27-04-16 F10000060 30
8 27-04-16 F10000020 10
要求输出为:-
日期
F10000010 F10000060 F10000020
27-04-16 10 30 10
据我们所知,oracle 10g 中没有可用的数据透视功能。那么我们如何才能做到这一点。这里 Item_CODE 是动态代码,可以根据日期变化。
任何帮助都将非常适用。
谢谢
PREM
使用以下程序解决:
创建或替换过程 dynamic_pivot(p_cursor in out sys_refcursor)
作为
sql_query varchar2(1000) := 'select PLAN_DATE ';
开始
对于 x in (select distinct ITEM_CODE,qty from XXES_DAILY_PLAN_TRAN where PLAN_DATE='27-04-2016')
环形
sql_query := sql_query ||
' , sum(case when qty = '''||x.qty||''' then qty else 0 end) as '||x.ITEM_CODE;
dbms_output.put_line(sql_query);
结束循环;
sql_query := sql_query || ' from XXES_DAILY_PLAN_TRAN where PLAN_DATE=''27-04-2016'' group by PLAN_DATE ';
dbms_output.put_line(sql_query);
为 sql_query 打开 p_cursor;
结束;
//调用
变量 x refcursor
执行 dynamic_pivot(:x)
打印 x
我在 ORACLE 10G 中有以下 table :-
AUTOID PLAN_DATE ITEM_CODE 数量
5 27-04-16 F10000010 10
7 27-04-16 F10000060 30
8 27-04-16 F10000020 10
要求输出为:-
日期
F10000010 F10000060 F10000020
27-04-16 10 30 10
据我们所知,oracle 10g 中没有可用的数据透视功能。那么我们如何才能做到这一点。这里 Item_CODE 是动态代码,可以根据日期变化。 任何帮助都将非常适用。
谢谢 PREM
使用以下程序解决: 创建或替换过程 dynamic_pivot(p_cursor in out sys_refcursor) 作为 sql_query varchar2(1000) := 'select PLAN_DATE '; 开始 对于 x in (select distinct ITEM_CODE,qty from XXES_DAILY_PLAN_TRAN where PLAN_DATE='27-04-2016') 环形 sql_query := sql_query || ' , sum(case when qty = '''||x.qty||''' then qty else 0 end) as '||x.ITEM_CODE; dbms_output.put_line(sql_query); 结束循环; sql_query := sql_query || ' from XXES_DAILY_PLAN_TRAN where PLAN_DATE=''27-04-2016'' group by PLAN_DATE '; dbms_output.put_line(sql_query); 为 sql_query 打开 p_cursor; 结束;
//调用
变量 x refcursor 执行 dynamic_pivot(:x) 打印 x