本帖最后由 uangjeenu 于 2011-07-15 10:19:36 编辑

解决方案 »

  1.   

    Times(次数)                            UV(用户数)
    1次                                  0
    2次                                      2上面可能不是那么清楚,我把结果再写清楚些,谢谢各位朋友解答下
      

  2.   

    SessionFlag(会话) User_Flag(用户)
    100 U01
    100 U02
    101 U01
    102 U02
    就是这个表的结果变成,就是用户数已经计算好的要去重掉
    Times(次数) UV(用户数)
    1次           0
    2次           2
      

  3.   

    真的很难理解 
    假设有以下数据怎么算
    100 U01
    100 U02
    101 U01
    101 U02
    102 U02101session要怎么计算 是算0 还是2
      

  4.   


    select 1 times,0 users from dual
    union all
    select 2 times,2 users from dual
      

  5.   

    PL/SQL能解决这个问题,即选择每一条记录,计数并判断有没有被统计到过,然后最后输出一条语句无法解决,原因在于ORACLE无法使用临时表如果您有权限建立临时表,那这个逻辑也好办。
      

  6.   


    select c.Times, d.UV
      from
      (
       select 1 as Times from dual
       union
       select 2 as Times from dual
      ) c left join
      (select b.Times,count(b.User_Flag) as UV  from
       (select count(a.SessionFlag) as Times,a.User_Flag
        from
         (select 100 as SessionFlag,'U01' as User_Flag from dual
          union
          select 100 as SessionFlag,'U02' as User_Flag from dual
          union
          select 101 as SessionFlag,'U01' as User_Flag from dual
          union
          select 101 as SessionFlag,'U02' as User_Flag from dual
          ) a
          group by a.User_Flag
        ) b
         group by b.Times
        ) d on c.Times=d.Times一时间搞不出0来,我写了case d.UV出错,请高手补充
      

  7.   


    select c.Times, case when d.UV is null then 0 else d.UV end UV
      from
      (
       select 1 as Times from dual
       union
       select 2 as Times from dual
      ) c left join
      (select b.Times,count(b.User_Flag) as UV  from
       (select count(a.SessionFlag) as Times,a.User_Flag
        from
         (select 100 as SessionFlag,'U01' as User_Flag from dual
          union
          select 100 as SessionFlag,'U02' as User_Flag from dual
          union
          select 101 as SessionFlag,'U01' as User_Flag from dual
          union
          select 101 as SessionFlag,'U02' as User_Flag from dual
          ) a
          group by a.User_Flag
        ) b
         group by b.Times
        ) d on c.Times=d.Times
      order by c.times终于搞出来了