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

求教 两个表关联汇总的问题!
表1:tb1
good_id     good_name     good_serial     user_id  
  1                 桌子               00001                   1
  1                 桌子               00002                   1
  1                 桌子               00003                   2
  2                 凳子               00004                   1

表2:tb2
good_id     good_serial     user_id
    1                   桌子                 1
    1                   桌子                 1
按user_id= '1 '查询,得出结果
good_name       tb1_count       tb2_count  
    桌子                   2                       2
    凳子                   1                       0

按user_id= '2 '查询,得出结果
good_name       tb1_count       tb2_count  
    桌子                   1                       0

请问sql语句应该怎么写??

------解决方案--------------------
create table tb1(good_id int,good_name varchar(10),good_serial varchar(10),[user_id] int)
insert into tb1
select 1, '桌子 ', '00001 ',1 union all
select 1, '桌子 ', '00002 ',1 union all
select 1, '桌子 ', '00003 ',2 union all
select 2, '登子 ', '00004 ',1

create table tb2(good_id int,good_serial varchar(10),[user_id] int)
insert into tb2
select 1, '桌子 ',1 union all
select 1, '桌子 ',1
GO

declare @user_id int
set @user_id=1
select isnull(A.good_name,B.good_serial) as good_name,isnull(A.tb1_count,0) as tb1_count,isnull(B.tb2_count,0) as tb2_count
from
(select good_name, [user_id],count(*) as [tb1_count] from tb1
where [user_id]=@user_id
group by good_name, [user_id]) A
full join
(select good_serial,[user_id],count(*) as [tb2_count] from tb2
where [user_id]=@user_id
group by good_serial,[user_id]) B
on A.good_name=B.good_serial

/* user_id=1結果:
good_name tb1_count tb2_count
---------- ----------- -----------
桌子 2 2
登子 1 0
*/

set @user_id=2
select isnull(A.good_name,B.good_serial) as good_name,isnull(A.tb1_count,0) as tb1_count,isnull(B.tb2_count,0) as tb2_count
from
(select good_name, [user_id],count(*) as [tb1_count] from tb1
where [user_id]=@user_id
group by good_name, [user_id]) A
full join
(select good_serial,[user_id],count(*)