Oracle實現行轉列+Mybatis


1.需求

報表需要動態展示某幾個公司分別在幾個月內銷售額情況(前端表頭月份是動態的,月時間段是前端參數來選擇的,最大為12個月),

頁面展示如下

Oracle數據庫中數據如下:

 

 可以看到一個公司的月份數據是行的,現在要轉成列

2.難點

  ①行怎么轉列

  ②轉成列后[''2019-01"][''2019-02"]....這種列名需要動態轉成 [month1][month2]...這種列名~否則Java里面的VO層展示不出來

3.思路

當然是百度咯~  

4.行轉列

"道生一,一生二,二生需求"~先把第一個給實現一下! 通過一番搜索,有一個函數貌似符合pivot ,不管了先試一把!

select *
from (select NAME, MONEY, MONTH
      from TEST)
         pivot (max(MONEY) for MONTH in (
        '2019-01' ,
        '2019-02' ,
        '2019-03'
        )
        );

效果:

 

 

emmmm......就是這個效果~

5.mybatis動態傳參數和列名

 我們先手動把月份數組轉一下,換成我們自定義的列名

select *
from (select NAME, MONEY, MONTH
      from TEST)
         pivot (max(MONEY) for MONTH in (
        '2019-01' AS month1 ,
        '2019-02' AS month2 ,
        '2019-03' AS month3
        )
        );

好了,效果符合預期~現在剩下的問題就是:

'2019-01' AS month1,怎么通過參數動態傳到mybatis中?
傳參方式有2種:
${} 和 #{} (具體區別自行百度)
  • ${} 替換結果不會增加單引號---也就是說參數傳"2019-01" 解析出來后是 2019-01
  • #{} 替換結果增加單引號---也就是說參數傳"2019-01" 解析出來后是 "2019-01"

 照這么看:我們應該使用:  #{月份參數}  AS   ${列名}  這種形式

 但是~ 運行起來就報錯~ 如下所示:

-------------------------------------------------------

 

-------------------------------------------------------

 所以老老實實都換成 ${}這種形式~ 

mybatis關鍵部分代碼參考如下:

 

 Java中傳參是monthList

 

 

 



5.總結

  學習使我快樂!

  


免責聲明!

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



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