现在有两个表
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月的点击量 ,要怎么做啊!!!请各位赐教!!!
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月的点击量 ,要怎么做啊!!!请各位赐教!!!
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 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
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
现在是想统计当前所有用户在不同时间的点击量.
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
(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楼那样比较吧。
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
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
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--以人的名称排序我不会上传图片,不好意思,结果上传不了~你自己去执行一下应该可以~我看到了你需要的效果(如果我理解正确的话)