Rows into columns

发表于:2007-06-07来源:作者:点击数: 标签:
create or replace package pivot as type rc is ref cursor; procedure data ( p_cursor in out rc ); end; create or replace package body pivot as procedure data( p_cursor in out rc ) is l_stmt long; begin l_stmt := 'select tr_date'; for x in (

create or replace package pivot
as
   type rc is ref cursor;
   procedure data ( p_cursor in out rc );
end;


create or replace package body pivot
as
                                                                                
      
procedure data( p_cursor in out rc )
is
    l_stmt long;
begin
                                                                                
      
    l_stmt := 'select tr_date';
    for x in ( select distinct item_id from t order by 1 )
    loop
        l_stmt := l_stmt ||
        ', max(decode(item_id,' || x.item_id ||
             ', adult )) adult_' || x.item_id ||
        ', max(decode(item_id,' || x.item_id ||
             ', child )) child_' || x.item_id;
    end loop;
    l_stmt := l_stmt || ' from t group by tr_date order by tr_date';
                                                                                
      
    open p_cursor for l_stmt;
end;

測試環境:

create table t (tr_date date, item_id number,adult number,child number)  

insert into t values(to_date('06/01/2004','DD/MM/YYYY') ,  9  ,  1199 ,   839.3)
insert into t values(to_date('06/01/2004','DD/MM/YYYY') ,   588  ,  1249  ,  874.3)
insert into t values(to_date('06/01/2004','DD/MM/YYYY') ,   4894  ,  2339 ,   2339)

                                                                                


原文转自:http://www.ltesting.net