急!大哥们来帮忙,关于SQL查询
表A:
agentid starttime result areaname
100 2007-8-22 8:23 21 hangzhou
101 2007-8-22 8:24 11 hangzhou
101 2007-8-23 8:31 1 hangzhou
101 2007-8-27 17:25 123 NULL
101 2007-8-27 17:32 123 NULL
101 2007-8-27 17:33 456 NULL
100 2007-8-22 8:23 2 hangzhou
101 2007-8-22 8:24 1 hangzhou
101 2007-8-23 8:31 1 hangzhou
101 2007-8-27 17:25 3 NULL
101 2007-8-27 17:32 5 NULL
101 2007-8-27 17:33 3 NULL
100 2007-8-22 8:23 2 hangzhou
100 2007-8-22 8:23 2 hangzhou
100 2007-8-22 8:23 2 hangzhou
101 2007-8-22 8:24 1 hangzhou
101 2007-8-23 8:31 111 hangzhou
101 2007-8-27 17:25 4
101 2007-8-27 17:32 41
101 2007-8-27 17:33 456
102 NULL NULL NULL
101 2007-8-25 8:24 1 hangzhou
100 2007-8-22 8:24 11 hangzhou
100 2007-8-22 8:24 11 hangzhou
表B:
yewu result
业务1 3
业务2 1
业务3 4
业务4 2
业务5 5
业务6 7
业务7 0
业务8 8
我现在想查询每天表A中result字段不在表B中的个数,但是希望能把表A中的每天都显示出来。如果某一天表A中的result字段在表B中,则查询出来的个数为0,请大家帮忙。我的查询语句如下:
select count(A.result),convert(char(8),starttime,112) from A where A.result not in(select B.result from B) group by convert(char(8),starttime,112),agentid,areaname order by convert(char(8),starttime,112) desc
查询出来的结果为:
5 20070827
1 20070823
3 20070822
1 20070822
但中间有个20070825这天的没查出来。因为我想得到
5 20070827
0 20070825
1 20070823
3 20070822
1 20070822
各位高手帮忙来看下
------解决方案--------------------
SQL code
select sum(case when b.result is null then 1 else 0 end),
convert(char(8),a.starttime,112)
from A left join b on a.result=b.result
group by convert(char(8),starttime,112),agentid,areaname
order by convert(char(8),starttime,112) desc
------解决方案--------------------
--试试这个?
SQL code
select count(A.result),convert(char(8),a.starttime,112)
from A left join (select B.result from B) b on a.result = b.result
where b.result is null
group by convert(char(8),a.starttime,112),a.agentid,a.areaname
order by convert(char(8),a.starttime,112) desc
------解决方案--------------------
SQL code
--创建环境
create table a
(
agentid varchar(5),
starttime smalldatetime,
result varchar(10),
areaname varchar(20)
)
insert into a select '100', '2007-8-22 8:23', '21', 'hangzhou'
insert into a select '101', '2007-8-22 8:24', '11', 'hangzhou'
insert into a select '101', '2007-8-23 8:31', '1' , 'hangzhou'
insert into a select '101', '2007-8-27 17:25', '123' , NULL
insert into a select '101', '2007-8-27 17:32', '123' , NULL
insert intol