我最近在做一个Java web项目,其中某个模块设计需要展示数据表格和图标,如图,
而数据库中数据存在2张表中(数据版本为oracle 11g):
-
表1 存储的配置表 ,图示:

-
表2存储的为数据(数值),图示:

那么我们改如何把表中数据转换为上面我们我们想要展示的数据呢?
通过观察发现:
-
目标数据3个单位列对应我们表2中的3个单位id
-
目标数据的类别类对应表2中xm2列
-
目标数值对应表2中的n1列
-
目标数据最后一行数据为dm ‘0306’ ‘0307’ ‘0308’ 的3行之和
分析:
- 想要实现多行合并一行(对应列相加),并没有太好的办法,但是我们经常做多列合并为一列的操作,对的这里我们先把列(xm2)行转列,把行合并转为列合并(相加),就实现了上面的4
- 此时查询结果和目标数据完全的行列倒置了,我们需要实现行列互换
- 首先列转行,既类别列转为行
- 接下来行转列,把单位行转为列
- 最后数据排序达到我们需要的数据
先介绍下Oracle相关的基础知识
1、行转列
pivot
语法:
select * from (select 字段 from 表 where 条件) unpivot (聚合函数(字段) for 字段 in (值1 别名,值2 别名 ))
已上面合并三行为例:
SELECT DWID, GJJS, JS, GJG, ZJG, NVL(CJG, 0) + NVL(WW, 0) + NVL(FW, 0) CJYX
FROM (SELECT DWID, N1, XM2
FROM RPT_LDYG_007
WHERE DWID IN ('10010001', '30200000', '10200000')
AND NY = '202104'
AND XM = '03')
PIVOT(MAX(N1)
FOR XM2 IN('0302' AS GJJS, '0303' AS JS, '0304' AS GJG, '0305' AS ZJG,

本文详细介绍如何使用Oracle数据库的pivot和unpivot操作实现数据从多行到多列的转换,并最终整理成所需的数据格式,包括具体步骤和SQL示例。

370

被折叠的 条评论
为什么被折叠?



