oracle 利用case与聚合函数实现列转行

思想:

利用case when ,构建需要查询出的字段名称,然后利用聚合函数进行汇总。

SELECT SUBPOLICYNO, SUMGROSSPREMIUM, SUMNETPREMIUM, 
SUM(( case  WHEN FEE='R10' then PAYFEE ELSE 0 END))  我方费用,
SUM(( case  WHEN FEE='R10C' then PAYFEE ELSE 0 END)) 从方费用,
SUM(( case  WHEN FEE='R10' then COINSRATE ELSE 0 END)) 我方比例,
SUM(( case  WHEN FEE='R10C' then COINSRATE ELSE 0 END)) 从方比例,
MIN( case  WHEN FEE='R10' then COINSCODE ELSE NULL END) 我方代码,
MIN( case  WHEN FEE='R10' then PAYEENAME ELSE NULL END) 我方名称,
MIN( case  WHEN FEE='R10C' then COINSCODE ELSE NULL END) 从方代码,
MIN( case  WHEN FEE='R10C' then PAYEENAME ELSE NULL END) 从方名称
 FROM (
        SELECT  a.SUBPOLICYNO,SUMGROSSPREMIUM, SUMNETPREMIUM, decode(feetypecode,'R10Z','R10',feetypecode) fee , SUM(payfee) payfee,b.COINSRATE,b.COINSCODE,PAYEENAME
        FROM coredb.gppolicypaymentdetail a ,coredb.gupolicycopycoinsurance b,coredb.gupolicyrisk c
        WHERE a.subPOLICYNO = b.subPOLICYNO AND a.ENDORSESEQNO = b.ENDORSEQNO AND a.PAYEENAME = b.COINSNAME 
        AND a.subPOLICYNO=c.subPOLICYNO
        AND feetypecode IN('R10','R10Z','R10C','R10P')  
        AND a.subPOLICYNO IN(
        'Z131010080120180003256')
        GROUP BY a.SUBPOLICYNO,SUMGROSSPREMIUM, SUMNETPREMIUM, decode(feetypecode,'R10Z','R10',feetypecode),b.COINSRATE,b.COINSCODE,PAYEENAME
) GROUP BY  SUBPOLICYNO, SUMGROSSPREMIUM, SUMNETPREMIUM;

sql子查询截图:
在这里插入图片描述
列转行的效果图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值