求版主(查询问题),马上结帖
drop table 订料表,来料表,发料表,库存表
go
create table 订料表(型号 varchar(10),料名 varchar(255),订料单号 varchar(20),供应商名 varchar(100),
订料数 numeric(20,6),要求到料时间 datetime,实际到料时间 datetime)
create table 来料表(型号 varchar(10),料名 varchar(255),来料单号 varchar(20),供应商名 varchar(100),
来料数 numeric(20,6),时间 datetime)
create table 发料表(型号 varchar(10),料名 varchar(255),发料单号 varchar(20),供应商名 varchar(100),
发料数 numeric(20,6),时间 datetime)
create table 库存表(型号 varchar(10),料名 varchar(255),库存数 numeric(20,6))
insert into 订料表
select '1001 ', '电源 ', 'A-1001 ', '一厂 ',200, '2007-04-10 ', '2007-04-12 '
union all select '1002 ', '电容 ', 'B-1001 ', '二厂 ',100, '2007-04-12 ', '2007-04-15 '
union all select '1001 ', '电源 ', 'A-1002 ', '一厂 ',500, '2007-04-18 ', '2007-04-20 '
insert into 来料表
select '1001 ', '电源 ', 'AL-1001 ', '一厂 ',200, '2007-04-12 '
union all select '1002 ', '电容 ', 'BL-1001 ', '二厂 ',100, '2007-04-15 '
union all select '1001 ', '电源 ', 'AL-1002 ', '一厂 ',500, '2007-04-20 '
insert into 发料表
select '1001 ', '电源 ', 'AF-1001 ', '一厂 ',100, '2007-04-13 '
union all select '1001 ', '电源 ', 'AF-1002 ', '一厂 ',30, '2007-04-15 '
union all select '1001 ', '电源 ', 'AF-1003 ', '一厂 ',20, '2007-04-16 '
union all select '1002 ', '电容 ', 'BF-1001 ', '二厂 ',10, '2007-04-20 '
union all select '1002 ', '电容 ', 'BF-1002 ', '二厂 ',50, '2007-04-21 '
union all select '1001 ', '电源 ', 'AF-1004 ', '一厂 ',50, '2007-04-22 '
insert into 库存表
select '1001 ', '电源 ',520
union all select '1002 ', '电容 ',40
怎么按型号,料名,日期 得到如下查询结果:
订料单号 型号 料名 来料时间 来料数量 发料单号 发料时间 发料数量 库存
A-1001 1001 电源 2007-04-12 200 NULL NULL NULL 220
A-1001 1001 电源 NULL NULL AF-1001 2007-04-13 100 120
A-1001 1001 电源 NULL NULL AF-1002 2007-04-15 30 90
A-1001 1001 电源 NULL NULL AF-1003 2007-04-16 20 70
A-1002 1001 电源 2007-04-20 500 NULL NULL NULL 570
A-1002 1001 电源 NULL NULL AF-1004 2007-04-22 50 520
NULL 1001 电源 NULL 700 NULL NULL 200 520
**************************************************************************
注释:四个表都用:型号 和 料名 关联起来
首先我是订料,订料之后来料,来一笔料:库存数=原库存数+来料数
发一笔料:库存数=原库存数-发料数
如果可以得出以上结果,也可以不关联库存表
**************************************************************************
[解决办法]
select (
select top 1 订料单号 from 订料表 where T.型号=型号 and 实际到料时间 <=isnull(T.来料时间,T.发料时间) order by 实际到料时间 DESC
) 订料单号,
T.型号,T.料名,T.来料时间,T.来料数量, T.发料单号,T.发料时间,T.发料数量,
(
select sum(来料数)
from (
--期初的库存就加在这个地方 由于我不知道你期初表的结构!所以没有加!
select 型号,时间,来料数 from 来料表
union
select 型号,时间,-发料数 from 发料表
) S
where T.型号=S.型号 and S.时间 <=T.时间
) as 库存
from T_Test T
where T.型号= '1001 '
order by T.时间
还有阿!你的表在设计上有点问题!
上面的订单号只是表面上解决了!
最好的方法是
发料表与订料表 直接(通过订料单号)有关联!!