select
表一   a 
 id                  myid                     fid               groupid 
 1	184	176	0   
 表二   b 
 id                  groupname            myid 
 1                        同学                           184	 
 我现在想得到的结果 
 groupname      num   b.id 
 默认分组            1         0 
 同学                        0         1   
 这样的查询怎么写?
------解决方案--------------------数据太少了,根本不知道你的1哪来的 
 请说明下
------解决方案--------------------不明白楼主的意思
------解决方案--------------------你得说清楚些!
------解决方案--------------------那你第2条纪录怎么来的了 
 说下每个字段是怎么得到的     
 请多给点数据!
------解决方案--------------------看到头痛......?数据什么来的?
------解决方案--------------------?
------解决方案--------------------create table c (id tinyint identity(1,1),myid tinyint,fid tinyint,groupid tinyint) 
 create table d (id tinyint identity(1,1),groupname varchar(10),myid tinyint) 
 go 
 insert c values(184,176,0) 
 insert c values(184,10,1) 
 insert c values(184,11,1) 
 insert c values(184,12,2) 
 insert c values(184,22,2) 
 insert c values(184,44,0) 
 go 
 insert d values( '同学 ',184) 
 insert d values( '同乡 ',184) 
 go 
 select isnull(d.groupname, '默认分组 ') groupname,count(*) num 
 from c left join d on c.groupid=d.id 
 group by d.groupname 
 返回: 
 groupname  num          
 ---------- -----------  
 默认分组       2 
 同乡         2 
 同学         2   
 (所影响的行数为 3 行)
------解决方案--------------------还是上面的例子代码: 
 在原来的基础上再加上一条: 
 insert d values( '合作 ',184) 
 go 
 ----------------------------- 
 select isnull(groupname, '默认分组 ') groupname,count(*) num 
 from c left join d on c.groupid=d.id 
 group by groupname 
 union all 
 select groupname, '0 ' num 
 from d 
 where id in (select d.id 
 from c right join d on c.groupid=d.id 
 where c.groupid is null) 
 group by groupname 
 返回: 
 groupname  num          
 ---------- -----------  
 默认分组       2 
 同乡         2 
 同学         2 
 合作         0   
 (所影响的行数为 4 行)