原帖参看:http://topic.csdn.net/u/20090923/10/27a3c4d3-9e3a-40fe-9f53-b1d1034bed33.html?1787787880
感谢各位的回复。我在这里把问题再稍作修改(标注红色部分是和原帖不同的需求):假设有一个用户表,比如叫做TAB_USER,只有两个字段:
字段名  类型    含义
USER_ID  number  用户ID 
GENDER   number  用户性别(0:女;1:男)
REG_TIME date    注册时间每天可能有几个用户注册,也可能没有用户注册。现在我要统计最近一周每天注册的女性用户数,我的SQL如下:select  count(USER_ID) AS rscount, to_char(REG_TIME, 'yyyy-MM-dd') as rsdate
from TAB_USER
where REG_TIME > sysdate - 7
and GENDER = 0
group by to_char(REG_TIME, 'yyyy-MM-dd')
order by to_char(REG_TIME, 'yyyy-MM-dd') asc得到的结果类似于:
439        2009-09-18
4309      2009-09-22其中19,20,21三天没有女性注册用户,但是我也想在SQL的结果中显示(因为数据需要作为输入在其它模块中使用),也就是结果期望类似于:
439        2009-09-18
0          2009-09-19
0          2009-09-20
0          2009-09-21
4309       2009-09-22望各位高手指点

解决方案 »

  1.   

    select a.days,count(b.user_id) 
    from 
    (select trunc(sysdate)-rownum+1 days from dual 
      connect by rownum <=7)a, 
    tab_user b 
    where a.days=trunc(b.reg_time(+)) 
    and b.GENDER=0
    group by a.days 
    order by a.days 
      

  2.   

    就是多了一个女性这个条件?
    select a.days,count(b.user_id) 
    from 
    (select trunc(sysdate)-rownum+1 days from dual 
      connect by rownum <=7)a, 
    tab_user b 
    where a.days=trunc(b.reg_time(+))
      and b.reg_time>sysdate-7
      and b.gender=0 
    group by a.days 
    order by a.days 
      

  3.   

    用left jion 连接到 临时表上的时间数据
      

  4.   


    select a.days,count(b.user_id) 
      from (select trunc(sysdate)-rownum+1 days from dual 
            connect by rownum <=7)a, 
           tab_user b 
     where a.days=trunc(b.reg_time(+)) 
       and (b.gender=0 or b.gender is null)
     group by a.days 
     order by a.days
      

  5.   

    select a.days,count(b.user_id) 
    from 
    (select trunc(sysdate)-rownum+1 days from dual 
      connect by rownum <=7)a, 
    (select * from tab_user where reg_time>sysdate-7 and gender=0) b 
    where a.days=trunc(b.reg_time(+)) 
    group by a.days 
    order by a.days 忘了这是外连接..改成上面的语句,或用left join在on后面加条件就不会有这样的问题