把问题想的太复杂了,就用左表连接就行了
--测试数据
--测试系别表
declare @tab1 table(xid varchar(8),xname varchar(8))
insert @tab1
select '0001','计算机系' union all
select '0002','物理系' union all
select '0003','工程系' union all
select '0004','文学系';
--建立班级表
declare @tab2 table(cid varchar(8),xid varchar(8),cname varchar(20))
insert @tab2
select '200801','0001','九一级一班' union all
select '200802','0001','九一级二班' union all
select '200701','0002','八九级一班' union all
select '200702','0002','八九级三班' union all
select '200703','0002','八九级五班' union all
select '200901','0004','九二级一班' union all
select '200902','0004','九二级二班' union all
select '200903','0004','九二级三班' union all
select '200904','0004','九二级四班';
--select * from @tab1
--select * from @tab2
--测试代码
select a.xname 系名,count(b.cid) as 班级个数 from @tab1 a
left join @tab2 b on a.xid=b.xid group by a.xname
/*测试结果
(所影响的行数为 4 行)
(所影响的行数为 9 行)
系名 班级个数
-------- -----------
工程系 0
计算机系 2
文学系 4
物理系 3
(所影响的行数为 4 行)*/