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 84
2例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文章。你试过了吗?这不是一种选择吗?