ITPub博客

首页 > 应用开发 > IT综合 > how to transform from rows to columns(zt from asktom)

how to transform from rows to columns(zt from asktom)

原创 IT综合 作者:jametong 时间:2005-04-14 14:48:07 0 删除 编辑
G -- Thanks for the question regarding "Rows into columns", version 9.0.1
originally submitted on 24-Jan-2004 20:20 Eastern US time, last updated 13-Apr-2005 9:55Tom's latest followup | GOTO a Bookmarkable Page | Bottom
You Asked (Jump to Tom's latest followup)

Hi Tom,

I have a query

sql> SELECT tr_date, item_id, adult_price adult, child_price child
FROM mytable
WHERE tr_date BETWEEN '01-jan-2004' AND '31-jan-2004'
AND   tr_code LIKE 'D%'

The output is

TR_DATE            ITEM_ID    ADULT    CHILD
06/01/2004    8    1189    832.3
06/01/2004    9    1199    839.3
06/01/2004    588    1249    874.3
06/01/2004    589    1239    867.3
06/01/2004    1625    2389    1672.3
06/01/2004    2186    2439    1707.3
06/01/2004    4081    2099    1469.3
06/01/2004    4083    2149    1504.3
.......
.......
.......
.......
.......
.......
.......

Now I want output like this (distinct dates in vertical and distinct item_id in
horizontal) and then adult and child price in cells. The number of columns
(item_id) depend on number of distinct item_id's returned by query and number of
rows depend on number of distinct tr_date returned by query. The adult and child
depend on the adult and child price for that date and that item_id. Hence I want
the result like this

Date/Itin_id    8    8    9    9    588    588    589
          adult    child    adult    child    adult    child    adult
06/01/2004    1189    832.3    1199    839.3    1249    874.3    1239
07/01/2004    ….    ….    ….    ….    ….    ….    ….
08/01/2004    ….    ….    ….    ….    ….    ….    ….
10/01/2004    ….    ….    ….    ….    ….    ….    ….
12/01/2004    ….    ….    ….    ….    ….    ….    ….
13/01/2004    ….    ….    ….    ….    ….    ….    ….

Please advise.

Regards,

GS
 

 
and we said...

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;
                                                                                
      
end;
/
                                                                                
      
                                                                                
      
variable x refcursor
set autoprint on
exec pivot.data( :x );

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/94317/viewspace-796037/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-11-23

  • 博文量
    47
  • 访问量
    281302