Oracle中复杂的行转列(第二弹)

203 阅读4分钟

关于使用Oracle行转列的随笔
参考博客:Oracle 行列转换详解yuncode.net/code/c_59bf…

  • 需要将数据库中的查询结果,导出为指定格式(数据列排版)Excel文件 Image.png

  • 过程及说明可看# oracle中复杂的行转列(第一弹)juejin.cn/post/705742…

  • sql(这是一段很蠢的sql):

select * from(

    (select distinct v.*

       from

         (select eva.atv_code,  eva.atv_cname,eva.create_time,eva.start_date,eva.end_date      

          from evactivity  eva

          left join evatv_group eg

            on eva.atv_code = eg.atv_code

          left join expert_extract_result eer

            on eer.group_code = eg.group_code  

          left join evreviewer e

            on eer.psn_code = e.psn_code

          left join person p

            on e.psn_code = p.psn_code

          left join const_dictionary cd

            on cd.category = 'expert_type'

           and cd.code = eer.expert_type

          left join org_office oo

            on eva.kfyw_org_code=oo.off_org_code  

         where eva.atv_type = 5

           and eer.assign_flag = '3'

           and oo.parent_org_code = 9000005897

           and eva.STAT_YEAR = '2020'

         order by eva.ATV_CODE asc)v)a

left join

    (SELECT t.atv_code,t.expert_type ,

        MAX(decode(rn, 1, zh_name, NULL)) ||

        MAX(decode(rn, 2, ',' || zh_name, NULL))   ||

        MAX(decode(rn, 3, ',' || zh_name, NULL))   ||

        MAX(decode(rn, 4, ',' || zh_name, NULL))   ||

        MAX(decode(rn, 5, ',' || zh_name, NULL))   ||

        MAX(decode(rn, 6, ',' || zh_name, NULL))   ||

        MAX(decode(rn, 7, ',' || zh_name, NULL))   ||

        MAX(decode(rn, 8, ',' || zh_name, NULL))   ||

        MAX(decode(rn, 9, ',' || zh_name, NULL))   ||

        MAX(decode(rn, 10, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 11, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 12, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 13, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 14, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 15, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 16, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 17, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 18, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 19, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 20, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 21, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 22, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 23, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 24, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 25, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 26, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 27, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 28, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 29, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 30, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 31, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 32, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 33, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 34, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 35, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 36, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 37, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 38, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 39, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 40, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 41, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 42, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 43, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 44, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 45, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 46, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 47, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 48, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 49, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 50, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 51, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 52, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 53, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 54, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 55, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 56, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 57, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 58, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 59, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 60, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 61, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 62, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 63, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 64, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 65, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 66, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 67, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 68, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 69, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 70, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 71, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 72, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 73, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 74, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 75, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 76, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 77, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 78, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 79, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 80, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 81, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 82, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 83, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 84, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 85, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 86, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 87, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 88, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 89, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 90, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 91, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 92, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 93, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 94, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 95, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 96, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 97, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 98, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 99, ',' || zh_name, NULL))  ||

        MAX(decode(rn, 100, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 101, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 102, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 103, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 104, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 105, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 106, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 107, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 108, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 109, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 110, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 111, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 112, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 113, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 114, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 115, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 116, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 117, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 118, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 119, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 120, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 121, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 122, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 123, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 124, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 125, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 126, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 127, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 128, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 129, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 130, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 131, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 132, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 133, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 134, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 135, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 136, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 137, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 138, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 139, ',' || zh_name,  NULL)) ||

        MAX(decode(rn, 140, ',' || zh_name,  NULL)) str

        

      FROM

          (select eva.atv_code,cd.zh_cn_caption  as expert_type,

                  (p.zh_name || ' ' ||  decode(nvl(ece.total_score,-1),-1,'无',ece.total_score)) as zh_name,                             

                  row_number() over(PARTITION BY eva.atv_code,cd.zh_cn_caption ORDER  BY eva.ATV_CODE desc,cd.zh_cn_caption) AS rn

            from evactivity  eva

            left join evatv_group eg

              on eva.atv_code = eg.atv_code

            left join expert_extract_result eer

              on eer.group_code = eg.group_code  

            left join evreviewer e

              on eer.psn_code = e.psn_code

            left join person p

              on e.psn_code = p.psn_code

            left join const_dictionary cd

              on cd.category = 'expert_type'

             and cd.code = eer.expert_type

            left join org_office oo

              on eva.kfyw_org_code=oo.off_org_code  

            left join evatv_credit_evaluation ece

              on ece.atv_code = eva.atv_code

              and ece.psn_code = p.psn_code   

           where eva.atv_type = 5

             and eer.assign_flag = '3'

             and oo.parent_org_code = 9000005897

             and eva.STAT_YEAR = '2020'

             

           group by  eva.atv_code,cd.zh_cn_caption  ,p.zh_name,ece.total_score

           order by eva.ATV_CODE  asc,expert_type)t

     GROUP BY t.atv_code,t.expert_type )c  

on a.atv_code=c.atv_code

left join

  (select atv_code, expert_type,count(0) from

    (select eva.atv_code,

           cd.zh_cn_caption as expert_type,

           p.zh_name,

           row_number() over(PARTITION BY  eva.atv_code, cd.zh_cn_caption ORDER BY  eva.ATV_CODE desc, cd.zh_cn_caption) AS rn

      from evactivity eva

      left join evatv_group eg

        on eva.atv_code = eg.atv_code

      left join expert_extract_result eer

        on eer.group_code = eg.group_code

      left join evreviewer e

        on eer.psn_code = e.psn_code

      left join person p

        on e.psn_code = p.psn_code

      left join const_dictionary cd

        on cd.category = 'expert_type'

       and cd.code = eer.expert_type

      left join org_office oo

        on eva.kfyw_org_code = oo.off_org_code

      left join evatv_credit_evaluation ece

        on ece.atv_code = eva.atv_code

       and ece.psn_code = p.psn_code

     where eva.atv_type = 5

       and eer.assign_flag = '3'

       and oo.parent_org_code = 9000005897

       and eva.STAT_YEAR = '2020'

       and ece.total_score is null

     group by eva.atv_code, cd.zh_cn_caption,  p.zh_name, ece.total_score

     order by eva.ATV_CODE desc, expert_type)

  group by atv_code, expert_type

  order by atv_code asc, expert_type)e

on a.atv_code=e.atv_code

and c.expert_type=e.expert_type

)

order by a.atv_code asc

文末:希望各路大神不吝赐教!