我希望能得到一些需要调整的视图的帮助,但我不确定。 视图采用以下格式:
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。它必须是动态的......
答案 0 :(得分:2)
感谢您的建议,我明白了。实际上在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
1 case_1 10 80 15 84
2 case_2 13 65 20 90
3 case_3 17 70 7 72
现在的事情不是打印我想将它存储在视图中的结果。我如何实现这一目标?我试着修改这条线
l_query LONG:='SELECT case_order,case';
与
l_query LONG:='创建或替换视图选择case_order,case';
不用说它没有用,因为CREATE OR REPLACE是一个DDL语句,所以我必须使用EXECUTE IMMEDIATE。
有什么建议吗?提前谢谢。