- 爱易网页
 
                        - 
                            MSSQL教程
 
                        - 请问材料采购计划表的SQL写法 
 
                         
                    
                    
                    日期:2014-05-19  浏览次数:20755 次 
                    
                        
                         请教材料采购计划表的SQL写法?
create   table   t_kc   --库存表 
 ( 
    type   varchar(20),--材料类别    
    mc         varchar(20),--材料名称 
    dw         varchar(20),--材料单位 
    gg         varchar(20),--材料规格 
    sl         int,                        --出入库数量 
    dj         decimal(13,2),--单价 
    status   char(1),--出入库状态   1为入库      0为出库 
    bz         varchar(50),--材料用途 
    gydw   varchar(50),   --供应单位 
    rq         datetime   --出入库日期 
 ) 
 insert   into   t_kc   select    '标准件 ', '螺丝 ', '根 ', 'M10 ',100,1, '1 ',null, '供应部门1 ', '2007-6-1 ' 
 insert   into   t_kc   select    '标准件 ', '螺丝 ', '根 ', 'M10 ',100,1.5, '1 ',null, '供应部门2 ', '2007-6-2 ' 
  
 insert   into   t_kc   select    '标准件 ', '螺丝 ', '根 ', 'M10 ',30,1, '0 ', '车底板 ',null, '2007-6-3 ' 
  
 create   table   t_bzj_zl_ys      --材料预算表 
 ( 
    type   varchar(20),   --材料类别 
    name   varchar(20),   --材料名称 
    dw         varchar(20),   --材料单位 
    gg         varchar(20),   --材料规格 
    sl         int,         --使用数量 
    dj         decimal(13,2),      --材料单价 
    yt         varchar(50)--用途 
 ) 
 insert   into   t_bzj_zl_ys      select    '标准件 ', '螺丝 ', '根 ', 'M10 ',200,2, '车底板 ' 
 /* 
 要得到材料采购计划表,按照材料类别,名称,单位,规格进行分组,格式为: 
  
 材料类别      材料名称      单位         规格               用途         计划用料数量         采购数量         最后一次入库单价         金额         最后一次供应单位         库存结余数量    
 标准件               螺丝                  根            M10            车底板                  200                           30                                       1.5                              45                        供应部门2                        170 
  
 */ 
 drop   table   t_bzj_zl_ys 
 drop   table   t_kc
------解决方案--------------------
select  
 a.type, 
 a.mc, 
 a.dw, 
 a.gg, 
 a.yt, 
 a.sl as 计划用料数量, 
 case when a.sl> isnull(t.sl,0) then a.sl-isnull(t.sl,0) else 0 end as 采购数量, 
 t.dj as 最后一次入库单价, 
 case when a.sl> isnull(t.sl,0) then a.sl-isnull(t.sl,0) else 0 end*isnull(t.dj,0) as 金额, 
 t.gydw as 最后一次供应单位, 
 t.sl as 库存结余数量  
 from t_bzj_zl_ys a left join ( 
 select  
 type,mc,dw,gg, 
 sum(case when status=1 then sl else -sl end) as sl, 
 (select top 1 dj from t_kc where type=b.type and mc=t.mc and dw=b.dw and gg=b.gg and status= '1 ' order by rq desc) as sj, 
 (select top 1 gydw from t_kc where type=b.type and mc=t.mc and dw=b.dw and gg=b.gg and status= '1 ' order by rq desc) as gydw 
 from t_kc b 
 group by type,mc,dw,gg