日期:2014-05-19  浏览次数:20503 次

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 行)