求scmail81(琳·风の狼(修罗)) 再帮帮我,谢谢!
select (select 订料单号 from 订料表
where T.型号=型号 and T.料名=料名 and 实际到料时间=T.来料时间) as 订料单号,
T.型号,T.料名,T.来料时间,T.来料数量, T.发料单号,T.发料时间,T.发料数量,
(select sum(来料数)
from (
--期初的库存就加在这个地方 由于我不知道你期初表的结构!所以没有加!
select 型号,料名,时间,来料数 from 来料表
union
select 型号,料名,时间,-发料数 from 发料表) S
where T.型号=S.型号 and T.料名=S.料名 and S.时间 <=T.时间) as 库存
from
(select L.型号,L.料名,L.时间 as 来料时间,L.来料数 as 来料数量,null as 发料单号,null as 发料时间,null as 发料数量,L.时间
from 来料表 L
Union All
select F.型号,F.料名,NUll as 来料时间 ,null as 来料数量 ,F.发料单号,F.时间 as 发料时间,F.发料数 as 发料数量,F.时间
from 发料表 F)T
where T.型号= '1001 'and T.料名= '电源 '---and T.时间 between '2007-04-15 'and '2007-04-18 '
order by T.时间
以上语句得到结果如下:
订料单号 型号 料名 来料时间 来料数量 发料单号 发料时间 发料数量 库存
A-1002 1001 电源 2007-04-20 500 NULL NULL NULL 550
NULL1001 电源 NULL NULL AF-1004 2007-04-22 50 500
A-10031001 电源 2007-05-01 100 NULL NULL NULL 600
----------------------------------
总来料数/总发料数/现库存数 600 NULL NULL 50 600
----------------------------------
你帮我写的这个语句能不能再UNION ALL 一条记录上去啊(上面最后那条)...
求scmail81(琳·风の狼(修罗))你好,不知道你还有没有我的原始数据!
[解决办法]
declare @T table
(
订料单号 varchar(100),
型号 varchar(30),
料名 varchar(30),
来料时间 datetime,
来料数量 int,
发料单号 varchar(100),
发料时间 datetime,
发料数量 int,
库存 int
)
insert @T
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 '
insert @T
select '总来料数/总发料数/现库存数 ' as 订料单号, ' ' as 型号, ' ' as 料名,null as 来料时间,来料数量, ' ' as 发料单号,null as 发料时间,发料数量,库存
from (
select 型号,料名,sum(来料数量) as 来料数量,sum(发料数量) as 发料数量,sum(来料数量)-sum(发料数量) as 库存 --注:在这要加上期初的库存
from T_Test
where 型号= '1001 '
group by 型号,料名
) S
select * from @T