有两个表,a为销售总表,b为销售明细表,由票号进行关连
a表
票号 此次应收 补差
a01c200904010001 100 10b表
票号 序号 产品编号 数量 单价 金额
a01c200904010001 1 123001 1 50 50
a01c200904010001 2 123111 1 50 50select sum(金额),sum(补差) from ysb inner join ysa on ysa.票号=ysb.票号
想得到如下结果
100 10
可补差会出现20,因为其它字段需要就得用from ysb inner join ysa 这种型式,请问如何搞定呢
a表
票号 此次应收 补差
a01c200904010001 100 10b表
票号 序号 产品编号 数量 单价 金额
a01c200904010001 1 123001 1 50 50
a01c200904010001 2 123111 1 50 50select sum(金额),sum(补差) from ysb inner join ysa on ysa.票号=ysb.票号
想得到如下结果
100 10
可补差会出现20,因为其它字段需要就得用from ysb inner join ysa 这种型式,请问如何搞定呢
sum(b.金额),
sum(a.补差)
from (select 票号,sum(金额) 金额 from ysb group by 票号) b
inner join ysa a
on a.票号=b.票号
go
create table ysa([票号] varchar(20),[此次应收] int,[补差] int)
insert ysa select 'a01c200904010001',100,10
go
if object_id('ysb') is not null drop table ysb
go
create table ysb([票号] varchar(20),[序号] int,[产品编号] int,[数量] int,[单价] int,[金额] int)
insert ysb select 'a01c200904010001',1,123001,1,50,50
union all select 'a01c200904010001',2,123111,1,50,50
goselect
sum(b.金额) 金额,
sum(a.补差) 补差
from (select 票号,sum(金额) 金额 from ysb group by 票号) b
inner join ysa a
on a.票号=b.票号
/*
金额 补差
----------- -----------
100 10(1 行受影响)
*/
select sum(金额),sum(补差) from a
inner join (select 票号,sum(金额) as 金额 from b group by 票号 ) t
on a.票号=t.票号
(select 票号,sum(补差) 补差 from a) m
join
(select 票号,sum(金额) 金额from b) n
on m.票号=n.票号
(select 票号,sum(补差) 补差 from a group by 票号) m
join
(select 票号,sum(金额) 金额 from b group by 票号) n
on m.票号=n.票号
insert #ysa select 'a01c200904010001',100,10
gocreate table #ysb([票号] varchar(20),[序号] int,[产品编号] int,[数量] int,[单价] int,[金额] int)
insert #ysb select 'a01c200904010001',1,123001,1,50,50
union all select 'a01c200904010001',2,123111,1,50,50
goselect t.[票号],t.[单价],a.[补差]
from #ysa a
inner join
(
select [票号],sum([单价]) [单价] from #ysb group by [票号]
) T
on a.[票号]=t.[票号]票号 单价 补差
-------------------- ----------- -----------
a01c200904010001 100 10(1 行受影响)
CREATE TABLE YSA( 票号 CHAR(20),此次应收 INT,补差 INT)
INSERT YSA
SELECT 'a01c200904010001', 100 , 10 CREATE TABLE YSB( 票号 CHAR(20),序号 INT,产品编号 CHAR(10),数量 INT,单价 INT,金额 INT)
INSERT YSB
SELECT 'a01c200904010001', 1 , '123001', 1 , 50 , 50 UNION
SELECT 'a01c200904010001', 2 , '123111', 1 , 50 , 50 SELECT YSB.票号,SUM(金额)总金额,#T.补差 补差 FROM YSB INNER JOIN(SELECT 票号,SUM(补差) 补差 FROM YSA
GROUP BY 票号)AS #TON #T. 票号=YSB.票号GROUP BY YSB.票号,补差