zoukankan      html  css  js  c++  java
  • 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.总结

      学习使我快乐!

      

  • 相关阅读:
    Python学习笔记4—列表List
    Python学习笔记3—字符串
    电力项目十六--数据字典二
    电力项目十五--数据字典
    maven项目引入jar包
    电力项目十四--js添加highslider特效
    电力项目十三--js添加浮动框
    电力项目十二--运行监控中添加进度条
    panzer 电力项目十一--hibernate操作大文本字段Blob和Clob
    电力项目十--整合文本编辑器
  • 原文地址:https://www.cnblogs.com/coloz/p/12065881.html
Copyright © 2011-2022 走看看