急!大哥们来帮忙,关于SQL查询
表A:
agentidstarttimeresultareaname
1002007-8-22 8:23 21hangzhou
1012007-8-22 8:24 11hangzhou
1012007-8-23 8:31 1hangzhou
1012007-8-27 17:25 123NULL
1012007-8-27 17:32 123NULL
1012007-8-27 17:33 456NULL
1002007-8-22 8:23 2hangzhou
1012007-8-22 8:24 1hangzhou
1012007-8-23 8:31 1hangzhou
1012007-8-27 17:25 3NULL
1012007-8-27 17:32 5NULL
1012007-8-27 17:33 3NULL
1002007-8-22 8:23 2hangzhou
1002007-8-22 8:23 2hangzhou
1002007-8-22 8:23 2hangzhou
1012007-8-22 8:24 1hangzhou
1012007-8-23 8:31 111hangzhou
1012007-8-27 17:25 4
1012007-8-27 17:32 41
1012007-8-27 17:33 456
102NULL NULL NULL
1012007-8-25 8:24 1hangzhou
1002007-8-22 8:24 11hangzhou
1002007-8-22 8:24 11hangzhou
表B:
yewuresult
业务13
业务21
业务34
业务42
业务55
业务67
业务70
业务88
我现在想查询每天表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
各位高手帮忙来看下
[解决办法]
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.resultgroup by convert(char(8),starttime,112),agentid,areanameorder by convert(char(8),starttime,112) desc
[解决办法]
--试试这个?
select count(A.result),convert(char(8),a.starttime,112)from A left join (select B.result from B) b on a.result = b.resultwhere b.result is nullgroup by convert(char(8),a.starttime,112),a.agentid,a.areanameorder by convert(char(8),a.starttime,112) desc
[解决办法]
--创建环境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