首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

三个表一同统计有关问题,公司的帐目结算

2012-03-11 
三个表一同统计问题,公司的帐目结算现有库存表名称单价数量A38018B29039进货表名称进货数量进货时间A277/2

三个表一同统计问题,公司的帐目结算
现有

      库存表

          名称                     单价                     数量
          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

热点排行