-----------------------------------------------------------------------------------
-- Convert Rows into Columns using Oracle PIVOT
-----------------------------------------------------------------------------------
Example:

create table fruit_purchase_list
(day varchar2(10),
fruit varchar2(30),
constraint pk_fruit_purchase_list primary key(day,fruit)
);


insert into fruit_purchase_list
values('2014-01-01','APPLE');

insert into fruit_purchase_list
values('2014-01-01','STRAWBERRY');

insert into fruit_purchase_list
values('2014-01-01','PINEAPPLE');

insert into fruit_purchase_list
values('2014-01-01','BANANA');

insert into fruit_purchase_list
values('2014-01-01','PEACH');

insert into fruit_purchase_list
values('2014-01-01','GUAVA');
commit;

col fruit format a14
select day,fruit from fruit_purchase_list;
>>
DAY                  FRUIT
---------------  --------------
2014-01-01   APPLE
2014-01-01   STRAWBERRY
2014-01-01   PINEAPPLE
2014-01-01   BANANA
2014-01-01   PEACH
2014-01-01   GUAVA

select *
from fruit_purchase_list
pivot
(
  count(fruit)
  for fruit in (
                   'APPLE' as APPLE,
                   'ORANGE' as ORANGE,
                   'BANANA' as BANANA,
                   'STRAWBERRY' as STRAWBERRY,
                   'GRAPE' as GRAPE,
                   'GUAVA' as GUAVA,
                   'PINEAPPLE' as PINAPPLE,
                   'PEACH' as PEACH
                )
)
where day = '2014-01-01';
>>
DAY                 APPLE ORANGE BANANA STRAWBERRY GRAPE    GUAVA   PINAPPLE   PEACH
---------------  --------- ---------- ---------- ----------------- ---------- ---------- -------------  ---------
2014-01-01         1         0          1              1                   0         1              1               1


-----------------------------------------------------------------------------------
-- Convert Columns into a Single Row using Oracle UNPIVOT
-----------------------------------------------------------------------------------

Example:
create table fruit_purchase_list2
(day varchar2(10),
apple number(1),
orange number(1),
banana number(1),
strawberry number(1),
grape number(1),
guava number(1),
pineapple number(1),
peach number(1)
);

insert into fruit_purchase_list2
values('2014-01-01',1,0,1,1,0,1,1,1);

insert into fruit_purchase_list2
values('2014-01-08',0,1,0,1,1,1,0,0);


col day format a10
select * from fruit_purchase_list2;
>>
DAY                    APPLE    ORANGE BANANA STRAWBERRY GRAPE   GUAVA   PINEAPPLE  PEACH
---------------      ---------- ------------ ---------- ---------------- ---------- ---------- --------------   ----------
2014-01-01            1            0             1              1                0            1           1                  1
2014-01-08            0            1             0              1                1            1           0                  0

col fruit format a14
select day,fruit,picked
from fruit_purchase_list2
unpivot
(
   picked for fruit in (APPLE,ORANGE,BANANA,STRAWBERRY,GRAPE,GUAVA,PINEAPPLE,PEACH)
)
where day = '2014-01-01' order by picked desc;
>>
DAY                FRUIT              PICKED
---------------- ------------------- ----------
2014-01-01   APPLE                 1
2014-01-01   STRAWBERRY      1
2014-01-01   PINEAPPLE         1
2014-01-01   BANANA              1
2014-01-01   PEACH                1
2014-01-01   GUAVA                1
2014-01-01   GRAPE                0
2014-01-01   ORANGE             0

 

arrow
arrow
    全站熱搜

    DanBrother 發表在 痞客邦 留言(0) 人氣()