SQL 列转行UNPIVOT




在平常的需求中经常接到用户给的导入文件是一些测试数据需要我们进行列转行然后进行计算的,

如上图那样子我们要进行数据库计算肯定是不方便,所以我们必须进行列转行,所以我们将这个步骤放到数据库处理。

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也可以实现,只是实现代码比较长

 

 

 

 

打赏

取消 我去学网

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少
微信

打开微信扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

  1. #2

    木庄网络博客(2016/10/28 11:41:03)
    不错的网站主题,看着相当舒服

  2. #1

    木庄网络博客(2016/10/14 21:02:39)
    博客做得好漂亮哦!