三个表一同统计问题,公司的帐目结算
现有
库存表
名称 单价 数量
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
现在求剩余货物的总额值市值多少钱
[解决办法]
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
--1.直接从库存表计算?
select sum(单价*数量) 剩余货物的总额值市值 from 库存表
/*
剩余货物的总额值市值
-----------
18150
(所影响的行数为 1 行)
*/
--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 库存表,进货表,销售表
[解决办法]
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
结果:
-8030