如何构造SQL语句然后将多表查询生成另一张表呢?

ywduan 2004-10-03 04:34:32
入库表(InTable):
key 货名 入库数量 入库金额
A01 打印机 2 2000
A02 电视 5 4000

出库表(OutTable):
key 货名 出库数量 出库金额
B01 电脑 1 5000
B02 复印机 3 1400

库存表
key 货名 出入库标志 库存数量 库存金额
B01 电脑 出库 3 15000
A01 打印机 入库 5 10000
B02 复印机 出库 4 6000
A02 电视 入库 6 8000


现在想根据库存表的出入库标志,查找对应的入库表或者出库表,然后生成一张下面格式的财务表
应该怎么做呢?谢谢
key 货名 出入库标志 入库数量 入库金额 出库数量 出库金额 库存数量 库存金额
B01 电脑 出库 1 5000 3 15000
A01 打印机 入库 2 2000 5 10000
B02 复印机 出库 3 1400 4 6000
A02 电视 入库 5 4000 6 8000
...全文
186 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
viptiger 2004-10-03
--测试数据表建立
declare @intable table([key] varchar(10),货名 varchar(10),入库数量 int,入库金额 int)
declare @outtable table([key] varchar(10),货名 varchar(10),出库数量 int,出库金额 int)
declare @warehouse table([key] varchar(10),货名 varchar(10),出入库标志 varchar(10),库存数量 int,库存金额 int)
--测试数据插入
insert @intable
select 'A01','打印机',2,2000
union all
select 'A02','电视',5,4000


insert @outtable
select 'B01','电脑',1,5000
union all
select 'B02','复印机',3,1400

insert @warehouse
select 'B01','电脑','出库',3,15000
union all
select 'A01','打印机','入库',5,10000
union all
select 'B02','复印机','出库',4,6000
union all
select 'A02','电视','入库',6,8000

--查询
select a.[key],
a.货名,
a.出入库标志,
isnull(c.入库数量,0) 入库数量,
isnull(c.入库金额,0) 入库金额,
isnull(b.出库数量,0) 出库数量,
isnull(b.出库金额,0) 出库金额,
a.库存数量,
a.库存金额
from @warehouse a
left join @outtable b on a.[key] = b.[key]
left join @intable c on a.[key] = c.[key]

--结果

key 货名 出入库标志 入库数量 入库金额 出库数量 出库金额 库存数量 库存金额
---------- ---------- ---------- ----------- ----------- ----------- ----------- ----------- -----------
B01 电脑 出库 0 0 1 5000 3 15000
A01 打印机 入库 2 2000 0 0 5 10000
B02 复印机 出库 0 0 3 1400 4 6000
A02 电视 入库 5 4000 0 0 6 8000
回复
Selectau_fname 2004-10-03
收藏本贴!!!~~~~
回复
chinaandys 2004-10-03
楼主,看不明有什么规律可寻
回复
Selectau_fname 2004-10-03
怎么又碰上老邹拉!~~~



真是冤家路窄


呵呵
回复
zjcxc 元老 2004-10-03
--测试

--测试数据
create table InTable([key] varchar(10),货名 varchar(10),入库数量 int,入库金额 int)
insert InTable select 'A01','打印机',2,2000
union all select 'A02','电视' ,5,4000

create table OutTable([key] varchar(10),货名 varchar(10),出库数量 int,出库金额 int)
insert OutTable select 'B01','电脑' ,1,5000
union all select 'B02','复印机',3,1400

create table 库存表([key] varchar(10),货名 varchar(10),出入库标志 varchar(10),库存数量 int,库存金额 int)
insert 库存表 select 'B01','电脑' ,'出库',3,15000
union all select 'A01','打印机','入库',5,10000
union all select 'B02','复印机','出库',4,6000
union all select 'A02','电视' ,'入库',6,8000
go

--查询
select a.[key],a.货名,a.出入库标志
,入库数量=isnull(cast(b.入库数量 as varchar),'')
,入库金额=isnull(cast(b.入库金额 as varchar),'')
,出库数量=isnull(cast(c.出库数量 as varchar),'')
,出库金额=isnull(cast(c.出库金额 as varchar),'')
,a.库存数量,a.库存金额
from 库存表 a
left join InTable b on a.出入库标志='入库' and a.[key]=b.[key]
left join OutTable c on a.出入库标志='出库' and a.[key]=c.[key]
go

--删除测试
drop table 库存表,InTable,OutTable

/*--测试结果

key 货名 出入库标志 入库数量 入库金额 出库数量 出库金额 库存数量 库存金额
---- -------- ---------- --------- ----------- --------- ---------- --------- ----------
B01 电脑 出库 1 5000 3 15000
A01 打印机 入库 2 2000 5 10000
B02 复印机 出库 3 1400 4 6000
A02 电视 入库 5 4000 6 8000

(所影响的行数为 4 行)
--*/
回复
Selectau_fname 2004-10-03
up
回复
zjcxc 元老 2004-10-03
select a.[key],a.货名,a.出入库标志
,入库数量=isnull(cast(b.入库数量 as varchar),'')
,入库金额=isnull(cast(b.入库金额 as varchar),'')
,出库数量=isnull(cast(c.出库数量 as varchar),'')
,出库金额=isnull(cast(c.出库金额 as varchar),'')
,a.库存数量,a.库存金额
from 库存表 a
left join InTable b on a.出入库标志='入库' and a.[key]=b.[key]
left join OutTable c on a.出入库标志='出库' and a.[key]=c.[key]

回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-10-03 04:34
社区公告
暂无公告