博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL动态长度行列转置
阅读量:6863 次
发布时间:2019-06-26

本文共 1623 字,大约阅读时间需要 5 分钟。

一,案例问题描述:

某销售系统中,注册的用户会在随后的月份中购物下单,需要按月统计注册的用户中各个月下单的金额。源数据表如下:

FM::注册月份,CM: 下单月份, AMT:下单金额

 

期望得到如下统计结果:

 

在该案列中,随着时间变化,下单月份的值是不断变化的,因此在行列转置中,需要能够满足其动态变化的要求:

 

二,准备测试数据

CREATE TABLE TEST_PIVOT_DYNAMIC_COLUMN(       FM DATE,       CM DATE,       AMT NUMBER);INSERT INTO TEST_PIVOT_DYNAMIC_COLUMN SELECT ADD_MONTHS(TRUNC(CURRENT_DATE, 'MM'), -3), ADD_MONTHS(TRUNC(CURRENT_DATE, 'MM'), -2), 10 FROM DUAL;INSERT INTO TEST_PIVOT_DYNAMIC_COLUMN SELECT ADD_MONTHS(TRUNC(CURRENT_DATE, 'MM'), -1), ADD_MONTHS(TRUNC(CURRENT_DATE, 'MM'), -1), 1 FROM DUAL;INSERT INTO TEST_PIVOT_DYNAMIC_COLUMN SELECT ADD_MONTHS(TRUNC(CURRENT_DATE, 'MM'), -1), ADD_MONTHS(TRUNC(CURRENT_DATE, 'MM'), 0), 2 FROM DUAL;INSERT INTO TEST_PIVOT_DYNAMIC_COLUMN SELECT ADD_MONTHS(TRUNC(CURRENT_DATE, 'MM'), 0), ADD_MONTHS(TRUNC(CURRENT_DATE, 'MM'), 0), 2 FROM DUAL;SELECT *FROM TEST_PIVOT_DYNAMIC_COLUMN;

 

三,核心转置代码

CREATE OR REPLACE PROCEDURE SP_PIVOT_DYNAMIC_COLUMNISV_COLUMN VARCHAR2(1000);BEGIN--get the distinct value of all the month, and concatenate them togetherSELECT LISTAGG(FM,',') WITHIN GROUP (ORDER BY FM) INTO V_COLUMNFROM (SELECT DISTINCT  'TO_DATE(''' || TO_CHAR(FM, 'YYYY/MM/DD') || ''',''YYYY/MM/DD'') AS M'  || TO_CHAR(FM, 'YYYYMM') AS FMFROM TEST_PIVOT_DYNAMIC_COLUMN);EXECUTE IMMEDIATE'CREATE OR REPLACE VIEW TEST_PIVOT_DYNAMIC_COLUMN_PV ASSELECT * FROM TEST_PIVOT_DYNAMIC_COLUMNPIVOT(SUM(AMT)for CMin ('|| V_COLUMN ||'))ORDER BY FM';END SP_PIVOT_DYNAMIC_COLUMN;

check the result:

SELECT *FROM TEST_PIVOT_DYNAMIC_COLUMN;CALL SP_PIVOT_DYNAMIC_COLUMN();SELECT * FROM TEST_PIVOT_DYNAMIC_COLUMN_PV;

 

转载于:https://www.cnblogs.com/davablog/p/9723396.html

你可能感兴趣的文章
CSS
查看>>
Android笔记之为TextView设置边框
查看>>
【Lift】Scala Web 框架——Lift(一)准备工作
查看>>
【转载】增强学习(Reinforcement Learning and Control)
查看>>
GNU使用find命令
查看>>
java的执行与加载的过程
查看>>
8.2 sikuli 集成进eclipse 报错:Getting the VisionProxy.dll: Can not find dependent libraries......
查看>>
2.6.1 XML配置:创建XML文件
查看>>
第六天-数据分类型
查看>>
排版类
查看>>
Java中如何遍历Map对象
查看>>
iOS开发的技能树
查看>>
python 装饰器 回顾 及练习
查看>>
Flask学习之搭建环境
查看>>
为什么使用卷积?
查看>>
css盒模型不同浏览器下解释不同 解决办法
查看>>
Spring全家桶系列–[SpringBoot入门到跑路]
查看>>
Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)
查看>>
Java 调用 php接口(Ajax)(二)
查看>>
PHP和JAVA整合开发的三个方案(六)
查看>>