pivot 基本语法:pivot(聚合函数 for 列名 in(类型))
wm_concat 基本语法: WM_CONCAT(字段名)
基本需求情况:客户需要在系统中查看某月各项目的回款情况。
之中存在以下问题:每月回款可回前多月的款项。如2019年一月可以回2018年 7月,9月,12月的款。
客户要求可以根据用户回款的月份展示动态表头。以上面的距离是查询2019年1月的回款信息,需要返回的结果7,9,12,分别在三个列上。
原始表结构:

time_cd 为账期,即回款是回的哪个月。up_month 为操作日期(每月数据录入只能在当月内完成)。depart_id 为部门ID。PRO_ID 为项目ID。HS_NUM,BHS_NUM,SHUIE,分别为含税收入,不含税收入,税额。
目标:取UP_MONTH 为固定的某月。该月下的某一个部门下的所有项目各月的回款统计;
实现思路:使用pivot将 time_cd 转到列上,其中 pivot(聚合函数 for 列名 in(类型)) 类型部分使用嵌套的方法 用 wm_count()函数拼接time_cd。
代码:
SELECT
to_char(
'
SELECT *
from(
SELECT UP_MONTH,DEPART_ID,pro_id,TIME_CD, HS_NUM, BHS_NUM, SHUIE from tprg_dwsr_huikuan where up_month=''201810'' and depart_id = ''100001''
) pivot
(sum(HS_NUM) hs_num,sum(BHS_NUM) BHS_NUM

本文介绍了如何使用Oracle的PIVOT和wm_concat函数解决动态表头的问题,特别是在处理按月回款统计时。通过将time_cd转到列上,并用wm_count()函数拼接,实现了特定月份、部门和项目回款的详细统计。存储过程分为两步,首先处理wm_count(),然后进行pivot操作,最终形成所需动态表头的结果。
787

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



