Oracle11g 动态旋转
我希望能得到一些关于需要旋转的视图的帮助,但我不确定。 视图的格式如下:Oracle11g 动态旋转,oracle11g,plsqldeveloper,oracle-sqldeveloper,Oracle11g,Plsqldeveloper,Oracle Sqldeveloper,我希望能得到一些关于需要旋转的视图的帮助,但我不确定。 视图的格式如下: CASE CASE_ORDER MANAGER MONTHLY_CASES FISCAL_CASES case_1 1 John 15 84 case_1
CASE CASE_ORDER MANAGER MONTHLY_CASES FISCAL_CASES
case_1 1 John 15 84
case_1 1 Jeff 10 80
case_2 2 John 20 90
case_2 2 Jeff 13 65
case_3 3 John 7 72
case_3 3 Jeff 17 70
我的最终图表应如下所示:
CASE CASE_ORDER JOHN_CURR_MONTH JOHN_FY JOHN_CURR_MONTH JOHN_FY
case_1 1 15 84 10 80
case_2 2 20 90 13 65
case_3 3 7 72 17 70
我的问题是管理者可以改变,每个月的管理者数量也可以改变,
所以我不能硬编码他们的名字(即“mgr1”和“mgr2”)并使用DECODE。它必须是动态的 谢谢你的建议,我知道了。事实上,tom kyte的博客中也有类似的答案(http://www.oracle.com/technetwork/issue-archive/2012/12-jul/o42asktom-1653097.html)我为了我的目的修改了它。这是:
CREATE OR REPLACE PROCEDURE dynamic_pivot_proc ( p_cursor IN OUT SYS_REFCURSOR )
AS
l_query LONG := 'SELECT case_order, case';
BEGIN
FOR x IN (SELECT DISTINCT manager FROM test_table ORDER BY 1 )
LOOP
l_query := l_query ||
REPLACE( q'|, MAX(DECODE(manager,'$X$',monthly_total)) $X$_current_month|',
'$X$', dbms_assert.simple_sql_name(x.manager) ) ||
REPLACE( q'|, MAX(DECODE(manager,'$X$',fiscal_total)) $X$_fy|',
'$X$', dbms_assert.simple_sql_name(x.manager) );
END LOOP;
l_query := l_query || ' FROM test_table
GROUP BY case_order, case
ORDER BY case_order ';
OPEN p_cursor FOR l_query;
END;
SQL> variable x refcursor;
SQL> exec dynamic_pivot_proc( :x );
SQL> print x
案例案例订单JEFF\u本月JEFF\u FY JOHN\u本月JOHN\u FY
1例10 80 15 842例13 65 20 90
3宗个案3 17 70 7 72 现在的问题不是打印结果,而是将其存储在视图中。我如何做到这一点?我试图修改该行
l_query LONG:='选择案例\订单,案例'
与
l_query LONG:=“创建或替换视图选择案例顺序,案例”
不用说,它不起作用,因为CREATE或REPLACE是一个DDL语句,所以我必须使用executeimmediate
有什么建议吗?提前感谢。如果您只需在谷歌上搜索“oracle pivot dynamic”,就会找到一些非常好的点击率。你试过什么了吗?我在发邮件之前一定四处看看了。正如我在我的原始帖子中所说,我当前的工作代码使用硬编码的名称来管理,但它可能会不时发生变化,因此我想让它成为动态的,这一点我还没有弄清楚。你们能提出一些解决方案吗?问题是,你们在谷歌上搜索“oracle dynamic pivot”,你们会找到一篇描述dynamic pivot选项的asktom文章。你试过了吗?这不是一种选择吗?