34,593
社区成员
发帖
与我相关
我的任务
分享
两个表分组的问题
需求:
两个表
tb1(进货)
编号 名称 型号 数量。。。
1 西瓜 大的 20
2 西瓜 小的 10
3 黄瓜 长的 15
4 西瓜 大的 20
5 黄瓜 短的 15
6 西瓜 大的 20
7 黄瓜 长的 15
.
.
tb2(出货)
编号 名称 型号 数量。。。
1 西瓜 大的 15
3 黄瓜 长的 5
2 西瓜 小的 5
2 西瓜 小的 5
1 西瓜 大的 15
4 黄瓜 短的 5
输出:
名称 型号 数量(进货) 数量(出货) 余数(进货-出货)
西瓜 大的 60 30 30
西瓜 小的 10 10 0
黄瓜 长的 30 5 25
黄瓜 短的 15 5 10
tb1,tb2的编号为主键
select
a.名称,a.型号,a.数量,b.数量,isnull(a.型号,0)-isnull(b.型号,0) as 余数
from
(select 名称,型号,sum(数量) as 数量 from tb1 group by 名称,型号)a,
(select 名称,型号,sum(数量) as 数量 from tb1 group by 名称,型号)b
where
a.名称=b.名称
and
a.型号=b.型号
--> 测试数据:[tb1]
if object_id('[tb1]') is not null drop table [tb1]
go
create table [tb1]([编号] int,[名称] varchar(4),[型号] varchar(4),[数量] int)
insert [tb1]
select 1,'西瓜','大的',20 union all
select 2,'西瓜','小的',10 union all
select 3,'黄瓜','长的',15 union all
select 4,'西瓜','大的',20 union all
select 5,'黄瓜','短的',15 union all
select 6,'西瓜','大的',20 union all
select 7,'黄瓜','长的',15
--> 测试数据:[tb2]
if object_id('[tb2]') is not null drop table [tb2]
go
create table [tb2]([编号] int,[名称] varchar(4),[型号] varchar(4),[数量] int)
insert [tb2]
select 1,'西瓜','大的',15 union all
select 3,'黄瓜','长的',5 union all
select 2,'西瓜','小的',5 union all
select 2,'西瓜','小的',5 union all
select 1,'西瓜','大的',15 union all
select 4,'黄瓜','短的',5
--------------------------------查询开始------------------------------
select a.[名称],a.[型号],a.[数量(进货)],b.[数量(出货)], a.[数量(进货)]-b.[数量(出货)] from
(
select a.[名称],a.[型号],sum(a.[数量]) as [数量(进货)] from [tb1] a group by a.[名称],a.[型号]
) a,
(
select b.[名称],b.[型号],sum(b.[数量]) as [数量(出货)] from [tb2] b group by b.[名称],b.[型号]
) b
where a.[名称]=b.[名称] and a.[型号]=b.[型号]
order by a.[名称] desc
/*
名称 型号 数量(进货) 数量(出货)
---- ---- ----------- ----------- -----------
西瓜 大的 60 30 30
西瓜 小的 10 10 0
黄瓜 长的 30 5 25
黄瓜 短的 15 5 10
(4 行受影响)
select
a.名称,a.型号,isnull(a.数量,0) as 数量,isnull(b.数量,0) as 数量,isnull(a.数量,0)-isnull(b.数量,0) as 余数
from
(select 名称,型号,sum(数量) as 数量 from tb1 group by 名称,型号)a,
(select 名称,型号,sum(数量) as 数量 from tb1 group by 名称,型号)b
where
a.名称=b.名称
and
a.型号=b.型号
select
a.名称,a.型号,a.数量,b.数量,isnull(a.型号,0)-isnull(b.型号,0) as 余数
from
(select 名称,型号,sum(数量) as 数量 from tb1 group by 名称,型号)a,
(select 名称,型号,sum(数量) as 数量 from tb1 group by 名称,型号)b
where
a.名称=b.名称
and
a.型号=b.型号