zoukankan      html  css  js  c++  java
  • 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;
    

      

      

  • 相关阅读:
    python autopep8
    安卓代码覆盖率:android studio+ gradle+jacoco
    mac上运行appium提示错误Encountered internal error running command 解决办法
    python ide ---wing 注册机
    python 自动发邮件 Errno61 Connection refused
    instruments usage error specified target process is invalid
    selenium 关于富文本的处理
    动态规划计算字符相似度感觉棒棒哒
    windbg不识别pdb文件符号
    正则匹配全部中文
  • 原文地址:https://www.cnblogs.com/binguo2008/p/7153029.html
Copyright © 2011-2022 走看看