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
7 个解决方案
#1
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]
,入库数量=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]
#2
up
#3
--测试
--测试数据
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 行)
--*/
--测试数据
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 行)
--*/
#4
怎么又碰上老邹拉!~~~
真是冤家路窄
呵呵
真是冤家路窄
呵呵
#5
楼主,看不明有什么规律可寻
#6
收藏本贴!!!~~~~
#7
--测试数据表建立
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
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
#1
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]
,入库数量=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]
#2
up
#3
--测试
--测试数据
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 行)
--*/
--测试数据
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 行)
--*/
#4
怎么又碰上老邹拉!~~~
真是冤家路窄
呵呵
真是冤家路窄
呵呵
#5
楼主,看不明有什么规律可寻
#6
收藏本贴!!!~~~~
#7
--测试数据表建立
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
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