在平常的需求中经常接到用户给的导入文件是一些测试数据需要我们进行列转行然后进行计算的,
如上图那样子我们要进行数据库计算肯定是不方便,所以我们必须进行列转行,所以我们将这个步骤放到数据库处理。
1、将此文件整理后导入到数据库中如下图所示。
2、然后在数据库中使用数据库方法UNPIVOT 来进行转换成列并且对应到每个月
UNPIVOT顾名思义就是将多列转换成1列中去
直接放代码展示:
SELECT
ORG_L3_CODE,
ORG_L3_NAME,
CASE WHEN MONTH ='MONTH_1' THEN YEAR||'01'
WHEN MONTH ='MONTH_2' THEN YEAR||'02'
WHEN MONTH ='MONTH_3' THEN YEAR||'03'
WHEN MONTH ='MONTH_4' THEN YEAR||'04'
WHEN MONTH ='MONTH_5' THEN YEAR||'05'
WHEN MONTH ='MONTH_6' THEN YEAR||'06'
WHEN MONTH ='MONTH_7' THEN YEAR||'07'
WHEN MONTH ='MONTH_8' THEN YEAR||'08'
WHEN MONTH ='MONTH_9' THEN YEAR||'09'
WHEN MONTH ='MONTH_10' THEN YEAR||'10'
WHEN MONTH ='MONTH_11' THEN YEAR||'11'
WHEN MONTH ='MONTH_12' THEN YEAR||'12' END MONTH_CODE,
ORG_BUDGET
FROM BIODS.ODS_E_D_HRCLASS_BUDGET
UNPIVOT(ORG_BUDGET FOR MONTH IN(MONTH_1,MONTH_2,MONTH_3,MONTH_4,MONTH_5,
MONTH_6,MONTH_7,MONTH_8,MONTH_9,MONTH_10,MONTH_11, MONTH_12));
注意:UNPIVOT(变量1 FOR 变量2 IN(列名));其中IN()里面写上需要转换的列名,然后赋值给临时变量2,让其在结果中显示当成维度(列名转换成行),变量1是其列名所对应的值。UNPIVOT没有聚合函数
当然不适用UNPIVOT也可以实现,只是实现代码比较长
木庄网络博客(2016/10/28 11:41:03)
不错的网站主题,看着相当舒服