急救:Count(*)...Group by不能返回count值为0的行
如下: 
 declare   @A   table(f1   int) 
 declare   @B   table(f2   int)   
 insert   @A   select   1   union   all   select   3   union   all   select   5 
 insert   @B   select   2   union   all   select   4   union   all   select   6   
 select   count(*),B.f2   from   @A   A,@B   B   where   (A.f1> B.f2)   group   by   B.f2   
 本来设想返回的结果是 
 count         B.f2 
 --------------------- 
       2                  2 
       1                  4 
       0                  6   
 谁知在SQL   SERVER   2000里只返回前两行,最后一行那个count=0的项没了,而这一项恰恰是我所关心的。谁知道该怎么取到这一项?是否可以象set   statistics   time   on那样打开某个开关以取到这一项,或者改写一下句子以获得想要的B.f2=2这一项?   
 注:这是简化后的模型,真实的应用场景里是不允许修改(A.f1> B.f2)这个条件的,即把(A.f1> XXX)整个看成一个判断条件,用B.f2一个个去取代XXX,条件不成立的B.f2就是我想要的,即 
 select   count(*)   from   A   where   (A.f1> 2) 
 select   count(*)   from   A   where   (A.f1> 4) 
 select   count(*)   from   A   where   (A.f1> 6) 
 最后一行count=0的那个6就是我想要的。之所以用group把多条语句合成一条是为了效率。
------解决方案--------------------急救:Count(*)...Group by不能返回count值为0的行    
 === 
 并不是这个问题
------解决方案--------------------一般用having可以解决,可你这问题并非count的问题,而是SQL本身问题
------解决方案--------------------@_@,LZ的SQL就沒有找出6這一筆,以你舉的例子可以執行 
 declare @A table(f1 int) 
 declare @B table(f2 int)   
 insert @A select 1 union all select 3 union all select 5 
 insert @B select 2 union all select 4 union all select 6   
 select * from @A A,@B B where (A.f1> B.f2) 
 出來的結果: 
 f1          f2           
 ----------- -----------  
 3           2 
 5           2 
 5           4
------解决方案--------------------group by all B.f2 
 即可
------解决方案--------------------学习