drop table 订料表,来料表,发料表,库存表
gocreate 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
**************************************************************************
注释:四个表都用:型号 和 料名 关联起来
     首先我是订料,订料之后来料,来一笔料:库存数=原库存数+来料数
                               发一笔料:库存数=原库存数-发料数
如果可以得出以上结果,也可以不关联库存表
**************************************************************************

解决方案 »

  1.   

    订料单号  型号  料名  来料时间   来料数量  发料单号  发料时间   发料数量  库存
    A-1001    1001  电源  2007-04-12  200      NULL      NULL       NULL      220------------
    这个 库存220 去那提这数据阿!!
      

  2.   

    谢谢你,
    是的我还有期初库存
    来第一笔料之前我的库存是这样的:
    型号   料名    库存数
    1001   电源    20
    1002   电容    0
    库存表是实时的
    假如期初库存为了0的话订料单号  型号  料名  来料时间   来料数量  发料单号  发料时间   发料数量  库存
    A-1001    1001  电源  2007-04-12  200      NULL      NULL       NULL      200
      

  3.   

    create view T_Test
    as
            select L.型号,L.料名,L.时间 as 来料时间,L.来料数 as 来料数量,null as 发料单号,null as 发料时间,null as 发料数量,L.时间
            from 来料表 L
            --where  L.型号='1001'
            Union All
            select F.型号,F.料名,NUll as 来料时间 ,null as 来料数量 ,F.发料单号,F.时间 as 发料时间,F.发料数 as 发料数量,F.时间
            from 发料表 F
            --where  F.型号='1001' 
    select 
            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.时间
      

  4.   

    scmail81(琳·风の狼(修罗))
    你好!你的这个语句自己有调试过吗?
    好象有那么点问题吧....
      

  5.   

    scmail81(琳·风の狼(修罗)) 
    不好意思,前面我没有讲清楚我有个期初数据,怎么把第一笔来料那里的库存改成220啊
      

  6.   

    还有就是我的订料单号怎么没有呀?
    来第二笔料之前也就是2007-04-20之前订料单号都为A-1001
    20号和20号之后订料单号为A-1002
    直到来第三笔料,假如第三笔料的来料单号为A-1003的话
    那么第三笔料和第三笔料之后的订料单号为A-1003
    依此类推...怎么实现啊?谢谢了,解决了马上结帖
      

  7.   

    还是非常感谢你...
    能不能实现上面我说的那个效果啊
    你有QQ或者MSN吗?很想和你交个朋友,可以吗?scmail81(琳·风の狼(修罗))
      

  8.   

    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.时间还有阿!你的表在设计上有点问题!
    上面的订单号只是表面上解决了!
    最好的方法是发料表与订料表 直接(通过订料单号)有关联!!