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.总结
学习使我快乐!
Oracle实现行转列+Mybatis的更多相关文章
- Oracle中“行转列”的实现方式
在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用“行转列”: scott的emp的原始数据为: EMPNO ENAM ...
- 面试题:oracle数据库行转列的问题
今天我一个学弟问了一个面试题: 有表A,结构如下:A: p_ID p_Num s_id1 10 011 12 022 8 013 11 013 8 03其中:p_ID为产品ID,p_Num为产品库存量 ...
- Oracle中"行转列"的实现方式
在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用"行转列": scott的emp的原始数据为: ...
- Oracle学习总结(4)——MySql、SqlServer、Oracle数据库行转列大全
MySql行转列 以id分组,把name字段的值打印在一行,逗号分隔(默认) select CustomerDrugCode,group_concat(AuditItemName) from noau ...
- oracle 11g行转列 列转行
行转列: SELECT * FROM src_table UNPIVOT (param_value FOR param_name IN (product_color AS 'product ...
- Oracle数据 行转列
记录一段行转列SQL代码: select cs.standard_id,cs.area_code,cs.exu_dept, regexp_substr(exu_dept, , level) as de ...
- Oracle自定义行转列函数
--行转列自定义函数,只针对TABLE1表 --paramType是参数类型,用于判断,param1和param2是条件参数 create or replace function My_concat( ...
- Oracle pivot行转列函数案例
with temp as( select '湖北省' province,'武汉市' city,'第一' ranking from dual union all select '湖北省' provinc ...
- Oracle PIVOT 行转列方法
数据库中業種的存储如下图: SELECT * FROM M_TORIHIKISAKI_GYOSYU 其中GYIUSYU_CD字段代表不同的業種 而画面需要实现下图所示样式:(将每条数据的業種横向展开显 ...
随机推荐
- es5-class
1. 通过class定义类/实现类的继承2. 在类中通过constructor定义构造方法3. 通过new来创建类的实例4. 通过extends来实现类的继承5. 通过super调用父类的构造方法6. ...
- js 循环json
var json= { "Type": "Coding", "Height":100 }; for (var key in json) { ...
- java 多上传 CommonsMultipartFile[] files
/** * 视频上传 * ddl * @param request * @param response * @param files * @return * @throws Exception */@ ...
- 【Web】Spring WebFlux
阅读目录 一.关于WebFlux 二.SpringMVC与SpringWebFlux 三.Reactive Spring Web 四.实现WebFlux示例 SpringWebflux是SpringF ...
- forms 组件的功能和使用
forms组件 先自己实现注册功能,并且对用户输入的信息加限制条件 如果用户输入的信息不符合条件,前端展示报错信息 注册示例: 1.前端渲染标签获取用户输入 >>> 前端渲染标签 2 ...
- 基于aop的日志记录方式实现
说明 最近有个项目需要增加日志记录功能,因为这个项目原来是基于spring开发的,在查阅了相关资料以后,我采用了spring aop的方式实现该需求,然后就有了本篇文章. 思路 我这边需求是这样的:要 ...
- NX二次开发-基于MFC界面对话框与NX交互的开发
打开VS2013 点击新建,选择MFC DLL 点击确定 点下一步 什么都不改,直接点完成 进来之后先编译一下,看是否编译成功 打开项目属性,更改这几处 $(UGII_BASE_DIR)\ugopen ...
- C语言变长参数实现
#include<stdio.h> #include<string.h> #include<stdarg.h> /***编写可变长参数列表的函数案例*/ /* vo ...
- 戏说 .NET GDI+系列学习教程(三、Graphics类的应用_验证码扩展)
从别人那拷贝的 #region 定义和初始化配置字段 //用户存取验证码字符串 public string validationCode = String.Empty; //生成的验证码字符串 pub ...
- Template within template: why “`>>' should be `> >' within a nested template argument list” 解决方法
如果直接这样写: std::vector<boost::shared_ptr<int>> intvec; gcc编译器会把">>"当成opera ...