首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求版主(查询有关问题),马上结帖

2012-01-24 
求版主(查询问题),马上结帖droptable订料表,来料表,发料表,库存表gocreatetable订料表(型号varchar(10),料

求版主(查询问题),马上结帖
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.时间

还有阿!你的表在设计上有点问题!
上面的订单号只是表面上解决了!
最好的方法是

发料表与订料表 直接(通过订料单号)有关联!!

热点排行