进货表
名称 进货数量 进货时间
A 27 7/29/2007
B 42 7/30/2007
A 24 8/4/2007
B 40 8/4/2007
销售表
名称 出货数量 出货时间
A 45 8/15/2007
B 62 8/15/2007
A 52 8/22/2007
B 50 8/22/2007
现在求剩余货物的总额值市值多少钱
...全文
39215打赏收藏
三个表一同统计问题,公司的帐目结算
现有 库存表 名称 单价 数量 A 380 18 B 290 39 进货表 名称 进货数量 进货时间 A 27 7/29/2007 B 42 7/30/2007 A 24 8/4/2007 B 40 8/4/2007 销售表 名称 出货数量 出货时间 A 45 8/15/2007 B 62 8/15/2007 A 52 8/22/2007 B 50 8/22/2007 现在求剩余货物的总额值市值多少钱
SELECT A.名称,(A.库存数量 * B.单价) 库存总额
FROM
(
SELECT A.名称,(A.进货数量 - B.出货数量) 库存数量
FROM
(
SELECT 名称,SUM(进货数量) 进货数量
FROM 进货表
GROUP BY 名称
) A,
(
SELECT 名称,SUM(出货数量) 出货数量
FROM 进货表
GROUP BY 名称
) B
WHERE A.名称=B.名称
) A,
(
SELECT 名称,单价
FROM 库存表
) B
WHERE A.名称=B.名称
create table 库存表(名称 varchar(10),单价 int,数量 int)
insert into 库存表 values('A',380,18)
insert into 库存表 values('B',290,39)
create table 进货表(名称 varchar(10),进货数量 int,进货时间 datetime)
insert into 进货表 values('A',27,'7/29/2007')
insert into 进货表 values('B',42,'7/30/2007')
insert into 进货表 values('A',24,'8/4/2007')
insert into 进货表 values('B',40,'8/4/2007')
create table 销售表(名称 varchar(10),出货数量 int,出货时间 datetime)
insert into 销售表 values('A',45,'8/15/2007')
insert into 销售表 values('B',62,'8/15/2007')
insert into 销售表 values('A',52,'8/22/2007')
insert into 销售表 values('B',50,'8/22/2007')
go
查询语句:
select sum(金额) from (select 库存表.名称,库存表.单价*sum(数量+进出数量) 金额 from 库存表 JOIN (
select 名称,sum(进出数量) 进出数量 from (select 名称,出货数量*(-1) AS 进出数量 from 销售表
union all
select 名称,进货数量 from 进货表) as tp group by 名称) as TMP
on TMP.名称=库存表.名称
group by 库存表.名称,库存表.单价) as t
--2.联合三表一起计算
select sum(单价*(t1.数量+t2.进货数量-t3.出货数量)) 剩余货物的总额值市值 from 库存表 t1,
(select 名称 ,sum(进货数量) 进货数量 from 进货表 group by 名称) t2,
(select 名称 ,sum(出货数量) 出货数量 from 销售表 group by 名称) t3
where t1.名称 = t2.名称 and t1.名称 = t3.名称
/*
剩余货物的总额值市值
-----------
-8030
(所影响的行数为 1 行)
*/
--3.考虑到可能在某库不存在某产品,使用全连接
select sum(单价*(isnull(t1.数量,0)+isnull(t2.进货数量,0)-isnull(t3.出货数量,0))) 剩余货物的总额值市值
from 库存表 t1
full join (select 名称 ,sum(进货数量) 进货数量 from 进货表 group by 名称) t2 on t1.名称 = t2.名称
full join (select 名称 ,sum(出货数量) 出货数量 from 销售表 group by 名称) t3 on t1.名称 = t3.名称
/*
剩余货物的总额值市值
-----------
-8030
(所影响的行数为 1 行)
*/
drop table 库存表,进货表,销售表
select a.名称,(数量+b.进货数量-c.出货数量)*单价 from 库存表 a join
(select 名称,sum(进货数量)as 进货数量 from 进货表 group by 名称)b on a.名称=b.名称
join (select 名称,sum(出货数量)as 出货数量 from 出货表 group by 名称)c on
a.名称=c.名称
select a.名称,(isnull(a.数量,0)+isnull(b.进货数量,0)-isnull(c.出货数量,0))* a.单价 as 剩余金額
from 库存表 a
left join
(
select 名称 , sum(进货数量)as 进货数量 from 进货表 group by 名称
)b
on a.名称 =b.名称
(
select 名称 , sum(出货数量)as 出货数量 from 销售表 group by 名称
)c
left join a.名称 =c.名称