要完成如下统计(oracle)涉及三张表:YYXXB(医院信息表)(yybh 医院编号,yymc 医院名称)
            ZHZFB(账户支付表) (sqbh 申请编号,grzhzf 个人账户支付,tczhzf 统筹账户支付,zfyybh 支付医院编号)
            ZGRZSQB(职工入转申请表) (sqbh 申请编号, rylb 人员类别)
其中:YYXXB(医院信息表).(yybh医院编号)为主键,      且为ZHZFB(账户支付表)的外键 zfyybh(支付医院编号)
      ZGRZSQB(职工入转申请表).sqbh(申请编号)为主键,且为ZHZFB(账户支付表)的外键 sqbh(申请编号)
要求:以医院分组,分别统计出每个医院的各种人员类别(0,在职,1,保健,2,退休)的人数、个人账户支付(合计)、统筹账户支付(合计),
也就是:以医院分组,再以人员类别分组,统计出ZHZFB(账户支付表)的两个字段合计及人次合计

解决方案 »

  1.   

    SELECT T1.YYMC,
            NVL(CASE WHEN T3.RYLB='0' THEN COUNT(T2.SQBH) END ,0),
            NVL(CASE WHEN T3.RYLB='0' THEN SUM(T2.GRZHZF) END ,0),
            NVL(CASE WHEN T3.RYLB='0' THEN SUM(T2.TCZHZF)  END ,0),
            NVL(CASE WHEN T3.RYLB='1' THEN COUNT(T2.SQBH) END ,0),
            NVL(CASE WHEN T3.RYLB='1' THEN SUM(T2.GRZHZF) END ,0),
            NVL(CASE WHEN T3.RYLB='1' THEN SUM(T2.TCZHZF)  END ,0),
            NVL(CASE WHEN T3.RYLB='2' THEN COUNT(T2.SQBH) END ,0),
            NVL(CASE WHEN T3.RYLB='2' THEN SUM(T2.GRZHZF) END ,0),
            NVL(CASE WHEN T3.RYLB='2' THEN SUM(T2.TCZHZF)  END ,0)
    FROM YYXXB T1 ,ZHZFB T2 ,ZGRZSQB T3
    WHERE T1.YYBH=T2.ZFYYBH AND T2.SQBH=T3.SQBH
      

  2.   

    select yymc, 
           count(decode(RYLB, 0, zfyybh)), sum(decode(rylb, 0, grzhzf)), sum(decode(rylb, 0, tczhzf)),
           count(decode(RYLB, 1, zfyybh)), sum(decode(rylb, 1, grzhzf)), sum(decode(rylb, 1, tczhzf)),
           count(decode(RYLB, 2, zfyybh)), sum(decode(rylb, 2, grzhzf)), sum(decode(rylb, 2, tczhzf))
    from
    (
    select a.sqbh, b.RYLB, a.grzhzf, a.tczhzf, a.zfyybh, d.YYMC
     from ZHZFB a, ZGRZSQB b, yyxxb d
    where a.sqbh = b.sqbh
    and a.zfyybh = d.yybh
    )
    group by YYMC
      

  3.   


    case when + group by 
      

  4.   

    select t1.yybh, --医院编号
            t1.yymc, --医院名称
            sum(case when t3.rylb='0' then 1 else 0 end) 在职人员总数,
           sum(case when t3.rylb='1' then 1 else 0 end) 保健人员总数,
           sum(case when t3.rylb='2' then 1 else 0 end) 退休人员总数,
           sum(grzhzf) over(partition by rylb), --个账户支付(合计)
           sum(tczhzf) over(partition by rylb) --统筹账户支付(合计)
    from YYXXB T1, --医院信息表
         ZHZFB T2, --账户支付表
         AGRZSQB T3 --职工入转申请表
    WHERE t1.yybh=t2.zfyybh(+)
      and t3.shbh=t2.shbh(+)
    group by t1.yybh,
             t1.yymc;