oracle 行轉列 分組分列顯示


原始數據

type 分 1,2,3,4,5

     select name,yield ,type
      --type將數據分成不同組,為每組生成編號
      ,row_number() over(partition by type order by yield desc) rn
      --,dense_rank() over(order by yield desc) rn 
      from AAA 

 

根據分組生成每組對應的編號

最終sql

select 
 max(case when type = 1 then name end) as lv1 , max(decode(type,1,yield)) Ayield,
 max(case when type = 2 then name end) as lv2 , max(decode(type,2,yield)) Byield,
 max(case when type = 3 then name end) as lv3 , max(decode(type,3,yield)) Cyield,
 max(case when type = 4 then name end) as lv4 , max(decode(type,4,yield)) Dyield,
 max(case when type = 5 then name end) as lv5 , max(decode(type,5,yield)) Eyield
from 
(
      select name,yield ,type
      --type將數據分成不同組,為每組生成編號
      ,row_number() over(partition by type order by yield desc) rn
      --,dense_rank() over(order by yield desc) rn 
      from AAA 
)
group by rn
order by rn 

如果沒有分類,可以加一列分組

select max(case when lev = 1 then name end) as lv1, 
       max(case when lev = 2 then name end) as lv2 , 
       max(case when lev = 3 then name end) as lv3 
from
  (
  select name ,yield ,
  --對數據分組
  case when rn <=16 then 1 when rn <= 32 then 2 else 3 end lev 
  --不同分組編號
  ,row_number() over(partition by (case when rn <= 16 then 1 when rn <= 32 then 2 else 3 end ) order by yield desc) rn
  from 
      (
      select name,yield 
      --,row_number() over(partition by name order by yield desc) rn
      ,dense_rank() over(order by yield desc) rn 
      from AAA
      )
  )
group by rn 
--order by rn 

 


免責聲明!

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



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