两张表 一张出库表 一张入库表
入库表: 物品编码 物品名称 入库数量 入库时间 备注 出库表:物品编码 物品名称 出库数量 出库时间 提取人 备注
A AAA 100 2001 A AAA 10 2011 XX X
B BBB 100 2009 A AAA 10 2010 YY Y
C CCC 200 2007 B BBB 30 2011 ZZ Z
B BBB 100 2006 B BBB 10 2010 KK K
A AAA 50 2003 C CCC 20 2010 HH H
D DDD 100 2000序号查询产生的表
物品编码 物品名称 库存 入库时间 出库时间 提取人 备注
A AAA 130 2003 2011 XX X
B BBB 160 2009 2011 ZZ Z
C CCC 180 2007 2010 HH H
D DDD 100 2000
说明: "库存"为 相同"物品编码" 表1"入库数量"总和- 表2"出库数量"总和
入库时间 选择 入库表 中 最 大 时间
出库时间 , 提取人,备注 选择 出库表中 时间最大的 一组
如果入库表 中 有未出库 的 物品 比如"D" 则 无 “出库时间 提取人 备注 ” 显示以上。小弟做 ASP 要用显示 表 SQL语法没有学太多 简单的还行 复杂的只能求救各位大大了!
最好详细点 因为小弟对SQL 了解不算多
等级太低 不能设置多少分 十分抱歉 还是希望有人能救命啊
入库表: 物品编码 物品名称 入库数量 入库时间 备注 出库表:物品编码 物品名称 出库数量 出库时间 提取人 备注
A AAA 100 2001 A AAA 10 2011 XX X
B BBB 100 2009 A AAA 10 2010 YY Y
C CCC 200 2007 B BBB 30 2011 ZZ Z
B BBB 100 2006 B BBB 10 2010 KK K
A AAA 50 2003 C CCC 20 2010 HH H
D DDD 100 2000序号查询产生的表
物品编码 物品名称 库存 入库时间 出库时间 提取人 备注
A AAA 130 2003 2011 XX X
B BBB 160 2009 2011 ZZ Z
C CCC 180 2007 2010 HH H
D DDD 100 2000
说明: "库存"为 相同"物品编码" 表1"入库数量"总和- 表2"出库数量"总和
入库时间 选择 入库表 中 最 大 时间
出库时间 , 提取人,备注 选择 出库表中 时间最大的 一组
如果入库表 中 有未出库 的 物品 比如"D" 则 无 “出库时间 提取人 备注 ” 显示以上。小弟做 ASP 要用显示 表 SQL语法没有学太多 简单的还行 复杂的只能求救各位大大了!
最好详细点 因为小弟对SQL 了解不算多
等级太低 不能设置多少分 十分抱歉 还是希望有人能救命啊
A AAA 10 2011 XX X 往下 为出库表 备注为 X
if not object_id('Tempdb..#入库表') is null
drop table #入库表
Go
Create table #入库表([物品编码] nvarchar(1),[物品名称] nvarchar(3),[入库数量] int,[入库时间] int)
Insert #入库表
select N'A',N'AAA',100,'2001' union all
select N'B',N'BBB',100,'2009' union all
select N'C',N'CCC',200,'2007' union all
select N'B',N'BBB',100,'2006' union all
select N'A',N'AAA',50,'2003' union all
select N'D',N'DDD',100,'2000'
Go
--> --> (Roy)生成測試數據
if not object_id('Tempdb..#出库表') is null
drop table #出库表
Go
Create table #出库表([物品编码] nvarchar(1),[物品名称] nvarchar(3),[出库数量] int,[出库时间] int,[提取人] nvarchar(2),[备注] nvarchar(1))
Insert #出库表
select N'A',N'AAA',10,'2011',N'XX',N'X' union all
select N'A',N'AAA',10,'2010',N'YY',N'Y' union all
select N'B',N'BBB',30,'2011',N'ZZ',N'Z' union all
select N'B',N'BBB',10,'2010',N'KK',N'K' union all
select N'C',N'CCC',20,'2010',N'HH',N'H'
Go
select
a.[物品编码],a.[物品名称],a.[入库数量]-isnull(b.[出库数量],0) as 库存,a.[入库时间],
isnull(rtrim(c.[出库时间]),'') as [出库时间],
isnull(c.[提取人],'') as [提取人],
isnull(c.备注,'') as 备注
from
(Select [物品编码],[物品名称],sum([入库数量])as [入库数量],MAX([入库时间]) as [入库时间] from #入库表 group by [物品编码],[物品名称]) as a
left join
(select [物品编码],sum([出库数量])as [出库数量] from #出库表 group by [物品编码],[物品名称])as b on a.[物品编码]=b.[物品编码]
left join
(select [物品编码],[出库时间],[提取人],[备注] from #出库表 as a where not exists(select 1 from #出库表 where [物品编码]=a.[物品编码] and [出库时间]>a.[出库时间]) ) as c
on c.[物品编码]=a.[物品编码]/*
物品编码 物品名称 库存 入库时间 出库时间 提取人 备注
A AAA 130 2003 2011 XX X
B BBB 160 2009 2011 ZZ Z
C CCC 180 2007 2010 HH H
D DDD 100 2000
*/
a.物品编码 ,a.物品名称,
isnull(a.入库数量,0)-isnull(c.出库数量,0) as 库存,
a.入库时间,b. 出库时间,b.提取人 ,b.备注
from
(select 物品编码 ,物品名称 ,sum(入库数量 ) as 入库数量,max(入库时间) as 入库时间 from 入库表 group by 物品编码 ,物品名称)a
left join
(select * from 出库表 t where 出库时间=(select max(出库时间) from 出库表 where 物品编码=t.物品编码)b
on
a.物品编码=b.物品编码 and a.物品名称=b.物品名称
left join
(select 物品编码 ,物品名称 ,sum(出库数量 ) as 出库数量 from 出库表 group by 物品编码 ,物品名称)
on
a.物品编码=c.物品编码 and a.物品名称=c.物品名称
-- Author :fredrickhu(小F,向高手学习)
-- Date :2011-10-21 23:45:38
-- Version:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[入库表]
if object_id('[入库表]') is not null drop table [入库表]
go
create table [入库表]([物品编码] varchar(1),[物品名称] varchar(3),[入库数量] int,[入库时间] int,[备注] sql_variant)
insert [入库表]
select 'A','AAA',100,2001,null union all
select 'B','BBB',100,2009,null union all
select 'C','CCC',200,2007,null union all
select 'B','BBB',100,2006,null union all
select 'A','AAA',50,2003,null union all
select 'D','DDD',100,2000,null
--> 测试数据:[出库表]
if object_id('[出库表]') is not null drop table [出库表]
go
create table [出库表]([物品编码] varchar(1),[物品名称] varchar(3),[出库数量] int,[出库时间] int,[提取人] varchar(2),[备注] varchar(1))
insert [出库表]
select 'A','AAA',10,2011,'XX','X' union all
select 'A','AAA',10,2010,'YY','Y' union all
select 'B','BBB',30,2011,'ZZ','Z' union all
select 'B','BBB',10,2010,'KK','K' union all
select 'C','CCC',20,2010,'HH','H'
--------------开始查询--------------------------
select
a.物品编码 ,a.物品名称,
isnull(a.入库数量,0)-isnull(c.出库数量,0) as 库存,
a.入库时间,b. 出库时间,b.提取人 ,b.备注
from
(select 物品编码 ,物品名称 ,sum(入库数量 ) as 入库数量,max(入库时间) as 入库时间 from 入库表 group by 物品编码 ,物品名称)a
left join
(select * from 出库表 t where 出库时间=(select max(出库时间) from 出库表 where 物品编码=t.物品编码))b
on
a.物品编码=b.物品编码 and a.物品名称=b.物品名称
left join
(select 物品编码 ,物品名称 ,sum(出库数量 ) as 出库数量 from 出库表 group by 物品编码 ,物品名称)c
on
a.物品编码=c.物品编码 and a.物品名称=c.物品名称
----------------结果----------------------------
/* 物品编码 物品名称 库存 入库时间 出库时间 提取人 备注
---- ---- ----------- ----------- ----------- ---- ----
A AAA 130 2003 2011 XX X
B BBB 160 2009 2011 ZZ Z
C CCC 180 2007 2010 HH H
D DDD 100 2000 NULL NULL NULL(4 行受影响)*/