首页 > 代码库 > GreenPlum之按月份或季度实现行转列
GreenPlum之按月份或季度实现行转列
1.参考GreenPlum之生成月份字典表
GreenPlum之生成月份字典表
2.根据Case When语句及GreenPlum中string_agg聚合函数拼凑对应月份或季度周期字段,以下是核心实现sql,读者可根据需求自行修改:
if position(‘yyyy-mm‘ in in_datecolum)>0 then --按照月度周期实现行转列 out_strsql := ‘ select ‘||case in_matrix when 1 then ‘string_agg(‘‘,cast(count(distinct case when 日期字段=‘‘‘‘‘‘||monthid||‘‘‘‘‘‘ then 表名.字段名1 end) as numeric(16,0)) as "‘‘||monthid||‘‘" ‘‘,‘‘‘‘ order by monthid)‘ when 2 then ‘string_agg(‘‘,sum(case when 日期字段=‘‘‘‘‘‘||monthid||‘‘‘‘‘‘ then 表名.字段名2 else 0 end) as "‘‘||monthid||‘‘" ‘‘,‘‘‘‘ order by monthid)‘ when 3 then ‘string_agg(‘‘,sum(case when 日期字段=‘‘‘‘‘‘||monthid||‘‘‘‘‘‘ then 表名.字段名3 else 0 end) as "‘‘||monthid||‘‘" ‘‘,‘‘‘‘ order by monthid)‘ when 4 then ‘string_agg(‘‘,cast(count(distinct case when 日期字段=‘‘‘‘‘‘||monthid||‘‘‘‘‘‘ then 表名.字段名4 end) as numeric(16,0)) as "‘‘||monthid||‘‘" ‘‘,‘‘‘‘ order by monthid)‘ else ‘string_agg(‘‘,sum(case when 日期字段=‘‘‘‘‘‘||monthid||‘‘‘‘‘‘ then 表名.字段名3 else 0 end) as "‘‘||monthid||‘‘" ‘‘,‘‘‘‘ order by monthid)‘ end ||‘from ( select monthid from monthmapping where onday between ‘‘‘||in_startdate||‘‘‘ and ‘‘‘||in_overdate||‘‘‘ group by monthid) tab ‘; execute out_strsql into aggstr; --按照季度周期实现行转列 else out_strsql := ‘ select ‘||case in_matrix when 1 then ‘string_agg(‘‘,cast(count(distinct case when 日期字段=‘‘‘‘‘‘||monthid||‘‘‘‘‘‘ then 表名.字段名1 end) as numeric(16,0)) as "‘‘||monthid||‘‘" ‘‘,‘‘‘‘ order by monthid)‘ when 2 then ‘string_agg(‘‘,sum(case when 日期字段=‘‘‘‘‘‘||monthid||‘‘‘‘‘‘ then 表名.字段名2 else 0 end) as "‘‘||monthid||‘‘" ‘‘,‘‘‘‘ order by monthid)‘ when 3 then ‘string_agg(‘‘,sum(case when 日期字段=‘‘‘‘‘‘||monthid||‘‘‘‘‘‘ then 表名.字段名3 else 0 end) as "‘‘||monthid||‘‘" ‘‘,‘‘‘‘ order by monthid)‘ when 4 then ‘string_agg(‘‘,cast(count(distinct case when 日期字段=‘‘‘‘‘‘||monthid||‘‘‘‘‘‘ then 表名.字段名4 end) as numeric(16,0)) as "‘‘||monthid||‘‘" ‘‘,‘‘‘‘ order by monthid)‘ else ‘string_agg(‘‘,sum(case when 日期字段=‘‘‘‘‘‘||monthid||‘‘‘‘‘‘ then 表名.字段名3 else 0 end) as "‘‘||monthid||‘‘" ‘‘,‘‘‘‘ order by monthid)‘ end ||‘from ( select substring(onday,1,4)||‘‘-‘‘||EXTRACT(QUARTER from onday)||‘‘-01‘‘ as monthid from monthmapping where onday between ‘‘‘||in_startdate||‘‘‘ and ‘‘‘||in_overdate||‘‘‘ group by substring(onday,1,4)||‘‘-‘‘||EXTRACT(QUARTER from onday)||‘‘-01‘‘) tab ‘; execute out_strsql into aggstr; end if; raise notice ‘aggstr : %‘,aggstr;
GreenPlum之按月份或季度实现行转列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。