select 区域,城市,sum(数量)
from a
where a.区域=b.区域 and a.城市=b.城市
group by 区域,城市
nuion
select 区域,城市,sum(数量)
from b
where a.区域=b.区域 and a.城市=b.城市
group by 区域,城市
from a
where a.区域=b.区域 and a.城市=b.城市
group by 区域,城市
nuion
select 区域,城市,sum(数量)
from b
where a.区域=b.区域 and a.城市=b.城市
group by 区域,城市
from a
group by 区域,城市
Union All
select 区域,城市,sum(数量)
from a
group by 区域,城市
from a
group by 区域,城市
Union All
select 区域,城市,sum(数量)
from b
group by 区域,城市
(
select a.区域,a.城市,sum(a.数量) sss
from a
group by a.区域,a.城市
nuion all
select b.区域,b.城市,sum(b.数量) sss
from b
group by b.区域,b.城市
)c
group by 区域,城市
(
select 区域,城市,数量 from a
nuion
select 区域,城市,数量 from b
)c
group by 区域,城市
IsNull(A.区域,B.区域) As 区域,
IsNull(A.城市,B.城市) As 城市,
IsNull(SUM(A.数量),0) As A总数量,
IsNull(SUM(B.数量),0) As B总数量
from A
Full Join B
On A.区域=B.区域 And A.城市=B.城市
Group By IsNull(A.区域,B.区域),IsNull(A.城市,B.城市)
from a
group by 区域,城市
Union All
select 区域,城市,sum(数量)
from b
group by 区域,城市
from a
group by 区域,城市
Union All
select 区域,城市,sum(数量)
from b
group by 区域,城市这样可能有重复,把这个放到临时表再SELECT一边啦
想法是对的,我试过算出来的汇总数中a表的汇总的数是对的,但b表的全错了
载帮忙试试吧
select 区域,城市,sum(a数量),sum(b数量)
from
(
select distinct 区域,distinct 城市,a.数量 as a数量,b.数量 as b数量
from a inner join b
on a.区域=b.区域 and a.城市=b.城市
)
c
group by 区域,城市
A.区域 As 区域,
A.城市 As 城市,
IsNull(SUM(A.数量),0) As A总数量,
IsNull(SUM(B.数量),0) As B总数量
from A,B
where
A.区域=B.区域 And A.城市=B.城市
Group By A.区域,A.城市
from table_a a inner table_b b
on a.城市= b.城市
group by a.城市
就是这个思路,不过没把区域分出来,估计不同的城市定不在一个区域。
insert a select 'aaaa','北方','北京',10
union all select 'bbbb','北方','天津',15
union all select 'cccc','南方','上海',25
union all select 'dddd','南方','广州',5
go
create table b(客户名 varchar(20),区域 varchar(20),城市 varchar(20),数量 int)
insert b select 'aaaa','北方','北京',20
union all select 'bbbb','北方','广州',10
union all select 'cccc','北方','天津',2
union all select 'cccc','南方','上海',20
union all select 'dddd','南方','广州',20
--测试
go
select 区域,城市,sum(数量)
from b
group by 区域,城市
go
select a.区域,a.城市,sum(a.数量) as a数量,sum(b.数量) as b数量
from a inner join b on a.区域=b.区域 and a.城市=b.城市
group by a.区域 ,a.城市
但是我再多加了几条数据后,汇总出来的数又变得不对了,
你可以试试看看
还是先谢谢你
a表的数据
aaaa 北方 北京 10
bbbb 北方 天津 15
cccc 南方 上海 25
dddd 南方 广州 5
uuuu 北方 北京 50
oooo 南方 上海 25
a表的汇总
北方 北京 60
南方 广州 5
南方 上海 50
北方 天津 15
b表的数据
aaaa 北方 北京 20
bbbb 北方 天津 10
cccc 北方 天津 2
cccc 南方 上海 20
dddd 南方 广州 20
ererr 南方 上海 20
b表的汇总
北方 北京 20
南方 广州 20
南方 上海 40
北方 天津 12
但是你的汇总是
北方 北京 60 40
南方 广州 5 20
南方 上海 100 80
北方 天津 30 12
是不是不对吧!!!
create table a(客户名 varchar(20),区域 varchar(20),城市 varchar(20),数量 int)
delete a
insert a select 'aaaa','北方','北京',10
union all select 'bbbb','北方','天津',15
union all select 'cccc','南方','上海',25
union all select 'dddd','南方','广州',5
union all select 'eeee','南方','上海',15
go
create table b(客户名 varchar(20),区域 varchar(20),城市 varchar(20),数量 int)
delete b
insert b select 'aaaa','北方','北京',20
union all select 'bbbb','北方','广州',10
union all select 'cccc','北方','天津',2
union all select 'cccc','南方','上海',20
union all select 'dddd','南方','广州',20
union all select 'eeee','南方','广州',10--测试
go
select 区域,城市,sum(数量)
from b
group by 区域,城市select 区域,城市,sum(数量)
from a
group by 区域,城市
go
select a.区域,a.城市,sum(a.数量) as a数量,sum(b.数量) as b数量
from a left join b on a.区域=b.区域 and a.城市=b.城市
group by a.区域 ,a.城市select distinct a.区域,a.城市,null as a数量,null as b数量
into #AA from a join b on a.区域=b.区域 and a.城市=b.城市 update #AA set a数量=a.a数量 from (Select sum(数量) as a数量 ,区域 ,城市 from a group by 区域 ,城市) a
where #AA.区域=a.区域 and #AA.城市=a.城市
update #AA set b数量=b.b数量 from (select sum(数量) as b数量,区域 ,城市 from b group by 区域 ,城市) b
where #AA.区域=b.区域 and #AA.城市=b.城市
select * from #AA
(SELECT 区域, 城市, SUM(数量) AS 数量
FROM dbo.a
GROUP BY 区域, 城市) a full join
(SELECT 区域, 城市, SUM(数量) AS 数量
FROM dbo.b
GROUP BY 区域, 城市) b on a.区域=b.区域 and a.城市=b.城市Select
IsNull(A.区域,B.区域) As 区域,
IsNull(A.城市,B.城市) As 城市,
IsNull(SUM(A.数量),0) As A总数量,
IsNull(SUM(B.数量),0) As B总数量
from A
Full Join B
On A.区域=B.区域 And A.城市=B.城市
Group By IsNull(A.区域,B.区域),IsNull(A.城市,B.城市)
order by A.区域,A.城市
这两个结果是一样的。
北方 北京 10 20
北方 广州 0 10
北方 天津 15 2
南方 广州 5 30
南方 上海 40 20
A表:
aaaa 北方 北京 10
bbbb 北方 天津 15
cccc 南方 上海 25
dddd 南方 广州 5
eeee 南方 上海 15
aaaa 北方 北京 10
bbbb 北方 天津 15
cccc 南方 上海 25
dddd 南方 广州 5
eeee 南方 上海 15
B表:
aaaa 北方 北京 20
bbbb 北方 广州 10
cccc 北方 天津 2
cccc 南方 上海 20
dddd 南方 广州 20
eeee 南方 广州 10
aaaa 北方 北京 20
bbbb 北方 广州 10
cccc 北方 天津 2
cccc 南方 上海 20
dddd 南方 广州 20
eeee 南方 广州 10
a表和
SELECT 区域, 城市, SUM(数量) AS 数量
FROM dbo.a
GROUP BY 区域, 城市
--------------------
北方 北京 20
南方 广州 10
南方 上海 80
北方 天津 30
B表和
SELECT 区域, 城市, SUM(数量) AS 数量
FROM dbo.b
GROUP BY 区域, 城市
---------------------
北方 北京 40
北方 广州 20
南方 广州 60
南方 上海 40
北方 天津 4select isnull(a.区域,b.区域) 区域,isnull(a.城市,b.城市) 城市,isnull(a.数量,0) a数量,isnull(b.数量,0) b数量 from
(SELECT 区域, 城市, SUM(数量) AS 数量
FROM dbo.a
GROUP BY 区域, 城市) a full join
(SELECT 区域, 城市, SUM(数量) AS 数量
FROM dbo.b
GROUP BY 区域, 城市) b on a.区域=b.区域 and a.城市=b.城市
-----------------------------
北方 北京 20 40
北方 广州 0 20
北方 天津 30 4
南方 广州 10 60
南方 上海 80 40Select
IsNull(A.区域,B.区域) As 区域,
IsNull(A.城市,B.城市) As 城市,
IsNull(SUM(A.数量),0) As A总数量,
IsNull(SUM(B.数量),0) As B总数量
from A
Full Join B
On A.区域=B.区域 And A.城市=B.城市
Group By IsNull(A.区域,B.区域),IsNull(A.城市,B.城市)
order by A.区域,A.城市
----------------------------
北方 北京 40 80
北方 广州 0 20
北方 天津 60 8
南方 广州 40 120
南方 上海 160 160
只要将每个表统计的结果放在一起就是了
怎么会出现两个结果
这怎么能行啊
多谢huangpeiyan(虾米)的尽力帮助
继续求
select isnull(a.区域,b.区域),isnull(a.城市,b.城市),isnull(aCount,0),isnull(bCount,0)
from (select 区域,城市,sum(数量) as aCount from a group by 区域,城市) as t1
full join
(select 区域,城市,sum(数量) as bCount from b group by 区域,城市) as t2
on a.区域=b.区域 and a.城市=b.城市
select 区域,城市,sum(数量)
from a
group by 区域,城市
go
select 区域,城市,sum(数量)
from b
group by 区域,城市
go
select mm.区域,mm.城市,mm.数量 as a数量,nn.数量 as b数量
from (select 区域,城市,sum(数量) as 数量 from a group by a.区域 ,a.城市) mm left join
(select 区域,城市,sum(数量) as 数量 from b group by b.区域 ,b.城市) nn
on mm.区域=nn.区域 and mm.城市=nn.城市
--测试结果
区域 城市
-------------------- -------------------- -----------
北方 北京 60
南方 广州 5
南方 上海 50
北方 天津 15(所影响的行数为 4 行)区域 城市
-------------------- -------------------- -----------
北方 北京 20
北方 广州 10
南方 广州 20
南方 上海 40
北方 天津 2(所影响的行数为 5 行)区域 城市 a数量 b数量
-------------------- -------------------- ----------- -----------
北方 北京 60 20
北方 天津 15 2
南方 广州 5 20
南方 上海 50 40