select '本月入职', count(*)  from table_name
where in_date between trunc(sysdate, 'mm') and sysdate
union
select '本月入职', count(*) from table_name
where out_date between trunc(sysdate, 'mm') and sysdate

解决方案 »

  1.   

    随便找一个超过31条记录的表就行。
    select t,(select count(*) from 表 where in_date=t),(select count(*) from 表 where out_date=t) from (select to_char(yourdate+rownum-1,'yyyy-mm-dd') t from testtable where rownum<=(add_months(yourdate,1)-yourdate))
      

  2.   

    我想,你这个表的记录应该是大于 31 吧,如果不是,就找一个大于 31 条记录的表SELECT W.日期,U.入职人数,V.离职人数
     FROM
     (
       SELECT TO_CHAR(TO_DATE('2005-05-01', 'YY-MM-DD') + ROWNUM - 1, 'YYYY-MM-DD') AS 日期
        FROM TABLE_NAME
       WHERE ROWNUM <=31
     ) W,
     (
       SELECT TO_CHAR(IN_DATE,'YYYY-MM-DD') AS 日期,COUNT(*) AS 入职人数
        FROM TABLE_NAME
       WHERE TO_CHAR(IN_DATE,'YYYYMM') = '200505'
       GROUP BY TO_CHAR(IN_DATE,'YYYY-MM-DD')
     ) U,
     (
       SELECT TO_CHAR(OUT_DATE,'YYYY-MM-DD') AS 日期,COUNT(*) AS 离职人数
        FROM TABLE_NAME
       WHERE TO_CHAR(OUT_DATE,'YYYYMM') = '200505'
       GROUP BY TO_CHAR(OUT_DATE,'YYYY-MM-DD')
     ) V
    WHERE W.日期 = U.日期(+) AND W.日期 = V.日期(+)