Select Decode(A.IS_QUITWORK, '1', '在职', '2', '退休', '合计') As GROUPTYPE, /*人员类型*/
       (SELECT Count(Distinct C.ID_CARD)
          FROM V_M_ZF_COMBINATION_STAT C
         WHERE A.IS_QUITWORK = C.IS_QUITWORK
           AND C.ST_DATE >= '20040901'
           AND C.ST_DATE <= '20040902') As PSNCOUNT /*总人数*/
  From M_ZF_COMBINATION_STAT_SUMMARY A
 Where a.ST_DATE >= '20040901'
   And a.ST_DATE <= '20040902'
 Group By Rollup(A.IS_QUITWORK)
 Order By Decode(A.IS_QUITWORK, Null, 0)
      GROUPTYPE PSNCOUNT 
1 合计 0
2 在职 1658
3 退休 6012
其中合计行为0,应为7669,怎么修改SQL语句,谢谢!!!

解决方案 »

  1.   

    提供一个思路
    ----------------------------------------------with tmp as (
     select  '1' IS_QUITWORK, 1 ID_CARD from dual
     union all
     select  '2',1 from dual
     union all
     select  '1',2 from dual
      union all
     select  '1',3 from dual
      union all
     select  '1',1 from dual
     )
     select Decode(IS_QUITWORK, '1', '在职', '2', '退休', '合计') As GROUPTYPE, 
              count(distinct IS_QUITWORK||to_char(ID_CARD)) 
              from tmp
               group by 
                cube(IS_QUITWORK)
                   order by grouping_id(IS_QUITWORK) ascGROUPTYPE   PSNCOUNT
    --------- ----------
    在职                 3
    退休                 1
    合计                 43 rows selected.
      

  2.   

      SELECT   DECODE (A.IS_QUITWORK, '1', '在职', '2', '退休', '合计') GROUPTYPE,
               COUNT (1) PSNCOUNT
        FROM   M_ZF_COMBINATION_STAT_SUMMARY a, V_M_ZF_COMBINATION_STAT c
       WHERE       A.IS_QUITWORK = C.IS_QUITWORK
               AND C.ST_DATE >= '20040901'
               AND C.ST_DATE <= '20040902'
               AND A.ST_DATE >= '20040901'
               AND A.ST_DATE <= '20040902'
    GROUP BY   ROLLUP (A.IS_QUITWORK)关联没错的话,就没有问题
      

  3.   

    decode()函数相当于一个if判断句,想求合计在decode()外面加一个sum()试一下,即sum(decode(…))