现在有两个表  
table1
a             b
小宝          1
小强          1
小虎          1
table2
a             点击量          c
小宝          10             2008-01-01
小强          11             2008-01-01
小宝          12             2008-01-02
小强          9              2008-01-02
table2表里没有小虎的记录
我想统计小宝,小强,小虎 的在2008-01-01到2008-01-02月的点击量 ,要怎么做啊!!!请各位赐教!!!

解决方案 »

  1.   

    这样?
    SQL> select a.a,sum(b.b) from table1 a
      2  left outer join table2 b on a.a = b.a
      3  where b.c>=to_date('2008-01-01','yyyy-mm-dd') and b.c<=to_date('2008-01-02','yyyy-mm-dd')
      4  group by a.a;A                                          SUM(B.B)
    ---------------------------------------- ----------
    小宝                                             22
    小强                                             20Executed in 0 seconds
      

  2.   

    或者这样?SQL>   select a.a,sum(b.b) from table1 a
      2    left outer join (
      3      select * from table2 where c>=to_date('2008-01-01','yyyy-mm-dd') and c<=to_date('2008-01-02','yyyy-mm-dd')
      4    ) b on a.a = b.a
      5    group by a.a;A                                          SUM(B.B)
    ---------------------------------------- ----------
    小宝                                             22
    小虎                                     
    小强                                             20Executed in 0.016 seconds
      

  3.   

    你应该说明table1是做什么用的吧。你看table2里没有小虎的记录,如果你不说明table1的含义,那直接用table2统计一下不就出来了。也不需要用楼上那样关联2个表了,单纯统计的话就没意义了。不如直接用table2来统计一下就出来了。
      

  4.   


    SQL> select t1.a,sum(nvl(t2.b,0))
      2  from table1 t1
      3  left join table2 t2 on t1.a=t2.a
      4  and t2.c between to_date('20080101','YYYYMMDD') and to_date('20080102','YYYYMMDD')
      5  group by t1.a;A          SUM(NVL(T2.B,0))
    ---------- ----------------
    小虎                      0
    小宝                     22
    小强                     20
      

  5.   

    table1是当前所有的用户.table2是所有用户的在不同时间的点击量.
    现在是想统计当前所有用户在不同时间的点击量.
      

  6.   

    SQL> select * from table1;
    NAME             SUM1
    ---------- ----------
    小宝                1
    小强                1
    小虎                1SQL> select * from table2;
    A                             B C
    -------------------- ---------- --------------------
    小宝                         10 2008-01-01
    小强                         11 2008-01-01
    小宝                         12 2008-01-02
    小强                          9 2008-01-02
    select t1.name,nvl(t2.b,0) b,t1.c from
        (select name,c from table1,(select distinct c from table2)) t1,
    table2 t2 
    where t1.name=t2.a(+) and t1.c=t2.c(+);
    NAME                B C
    ---------- ---------- --------------------
    小宝               10 2008-01-01
    小虎                0 2008-01-01
    小强               11 2008-01-01
    小宝               12 2008-01-02
    小虎                0 2008-01-02
    小强                9 2008-01-02
      

  7.   

    忘记日期区间了,如果日期是字符类型的话就。select t1.name,nvl(t2.b,0) b,t1.c from
        (select name,c from table1,(select distinct c from table2 where c>='2008-01-01' and c<='2008-01-02')) t1,
    table2 t2 
    where t1.name=t2.a(+) and t1.c=t2.c(+);时间类型的话就按1楼那样比较吧。
      

  8.   

    首先要保证每天至少有一个存在点击量,即table2.c所含日期完整。SQL> select ac.a,ac.c,sum(nvl(b.b,0))
      2  from (select distinct t1.a,t2.c from table1 t1,table2 t2) ac
      3  left join table2 b on ac.a=b.a and ac.c=b.c
      4  and b.c between to_date('20080101','YYYYMMDD') and to_date('20080102','YYYYMMDD')
      5  group by ac.a,ac.c
      6  order by ac.c,ac.a;A          C           SUM(NVL(B.B,0))
    ---------- ----------- ---------------
    小宝       2008-1-1                 10
    小虎       2008-1-1                  0
    小强       2008-1-1                 11
    小宝       2008-1-2                 12
    小虎       2008-1-2                  0
    小强       2008-1-2                  96 rows selected
      

  9.   

    --创建表
    CREATE TABLE [dbo].[a] ( 
        [name] varchar(25) NULL,
        [no]   varchar(25) NULL 
        )
    GO
    CREATE TABLE [dbo].[b] ( 
        [name] varchar(25) NULL,
        [num]  int NULL,
        [date] varchar(25) NULL 
        )
    GO
    --插入纪录
    insert into a (name,no) values('小宝','1')
    insert into a (name,no) values('小虎','1')
    insert into a (name,no) values('小强','1')
    insert into b (name,num,date) values('小宝',10,'2008-01-01')
    insert into b (name,num,date) values('小强',11,'2008-01-01')
    insert into b (name,num,date) values('小宝',12,'2008-01-02')
    insert into b (name,num,date) values('小强',9,'2008-01-02')
    --查询语句
    select c.name,case when b.num is null then 0 else b.num end,c.date from 
    (
    select a.name,a.no,d.date from a  ,
    (select date from b group by date) d 
    ) c 
    left join b on c.name=b.name and c.date=b.date
    --查询结果
     name     column2     date       
     -------  ----------  ---------- 
     小宝       10          2008-01-01 
     小虎       0           2008-01-01 
     小强       11          2008-01-01 
     小宝       12          2008-01-02 
     小虎       0           2008-01-02 
     小强       9           2008-01-02 
      

  10.   

    --查询不同时间里各人的点击量
    Select distinct pt.a,IsNull(statnumber.点击量,0) AS 点击量,pt.c From
      (--得到所有时间与所有人的组合
        Select times.c,people.a From 
        (--得到所有时间
          Select c From table2 Group By c
        )AS times
        Inner Join
        (--得到所有人  
          Select a From table1
        )AS people On 1=1 --无条件连接
      )AS pt
       Left Join
      (--得到具体时间具体的人的点击量
        Select a,c,Sum(点击量) AS 点击量 From table2 Group By a,c
      )AS statnumber On pt.a=statnumber.a and pt.c=statnumber.c
    Order By pt.a--以人的名称排序我不会上传图片,不好意思,结果上传不了~你自己去执行一下应该可以~我看到了你需要的效果(如果我理解正确的话)