Oracle——行轉列、列轉行函數(pivot 和 unpivot函數)


pivot

語法:

(聚合函數 for 列名 in(類型))

注:其中 in(‘’) 中可以指定別名,in中還可以指定子查詢。

例子:

select * from 
(
select 333 nums,'蘋果' names from dual 
union all
select 555 nums,'香蕉' names from dual 
union all
select 777 nums,'鴨梨' names from dual
) pivot(sum(nums) for names in ('蘋果','香蕉','鴨梨'))

unpivot

注:沒有聚合函數

例子:

select nums,names from (                                                                    
select 
   333 蘋果,
   555 香蕉,
   666 鴨梨
from dual )
  unpivot(names for nums in(蘋果,香蕉,鴨梨)) 

 

例2:

創建表A

create table A 
(
ssyf varchar2(10),
num1 number,
num2 number,
num3 number
);

往表A插入數據

SSYF     NUM1 NUM2 NUM3  SZ
201901    1    2    3    a
201902    2    2    2    a
201903    3    3    3    a
201904    4    4    4    a
201905    5    5    5    a
201906    6    6    6    a
201907    7    7    7    a
201908    8    8    8    a
201909    9    9    9    a
201910    10    10    10    a
201911    11    11    11    a
201912    12    12    12    a
201901    1    1    1    b
201902    2    2    2    b
201903    3    3    3    b
201904    4    4    4    b
201905    5    5    5    b
201906    6    6    6    b
201907    7    7    7    b
201908    8    8    8    b
201909    9    9    9    b
201910    10    10    10    b
201911    11    11    11    b
201912    12    12    12    b

代碼和結果如下

1.

select *
  from a
pivot(sum(num1) num1, sum(num2) num2, sum(num3) num3
   for ssyf in('201901',
               '201902',
               '201903',
               '201904',
               '201905',
               '201906',
               '201907',
               '201908',
               '201909',
               '201910',
               '201911',
               '201912'))

結果:

 

 2.

select shu1, shu2, zdmc, ssyf, sz
  from a unpivot((shu1, shu2) for zdmc in((num1, num2) as
                                           '1and2',
                                           (num2, num3) as
                                           '2and3',
                                           (num1, num3) as
                                           '1and3'))
 where ssyf = '201901'
   and sz = 'a'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM