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

根据进货表、出货表生成出货明细的有关问题,拆分出货数从进货表取得单价!(含表结构)

2012-02-01 
根据进货表、出货表生成出货明细的问题,拆分出货数从进货表取得单价!(含表结构)进货表进货编号品名数量单价

根据进货表、出货表生成出货明细的问题,拆分出货数从进货表取得单价!(含表结构)
进货表
进货编号     品名           数量         单价      
1                     aa             2               500
2                     aa             3               500
3                     aa             4               510
4                     aa             1               510
5                     aa             2               530

出货表
出货编号     品名         数量          
1                     aa             1              
2                     aa             2
3                     aa             4            
4                     aa             4  

结果表
编号         品名             数量         单价
1                 aa                 1             500
2                 aa                 2             500
3                 aa                 2             500            
4                 aa                 2             510
5                 aa                 3             510
6                 aa                 1             530

    create       table       #进货表(编号   int,品名       varchar(10),数量       int,单价   int)    
    insert       #进货表       values(1, 'aa '       ,   2       ,500     )    
    insert       #进货表       values(2, 'aa '       ,             3       ,500   )    
    insert       #进货表       values(3, 'aa '       ,             4       ,510     )    


    insert       #进货表       values(4, 'aa '       ,             1       ,510     )    
    insert       #进货表       values(5, 'aa '       ,             2       ,530     )


    create       table       #出货表(编号   int,品名       varchar(10),数量       int)    
    insert       #出货表       values(1, 'aa '       ,             1)    
    insert       #出货表       values(2, 'aa '       ,             2)    
    insert       #出货表       values(3, 'aa '       ,             4)    
    insert       #出货表       values(4, 'aa '       ,             4)  
         
说明:根据进货表和出货表生成结果表,价格有变化时需把出货表中数据进行拆分,体现不同单价。
例如出货编号为3的记录,出货为4个,因为前面已出货3个,单价为500的货物还剩2个,所以要把这笔记录拆分成两条记录用于体现价格的变化。2个价格500,2个价格510,若没有出货时涉及几次进货,每次进货都是同样的价格的话,不需要拆分,出几个就记几个  


[解决办法]
好像是这样:
create table #进货表(编号 int,品名 varchar(10),数量 int,单价 int)
insert #进货表 values(1, 'aa ' , 2 ,500 )
insert #进货表 values(2, 'aa ' , 3 ,500 )
insert #进货表 values(3, 'aa ' , 4 ,510 )
insert #进货表 values(4, 'aa ' , 1 ,510 )
insert #进货表 values(5, 'aa ' , 2 ,530 )


create table #出货表(编号 int,品名 varchar(10),数量 int)
insert #出货表 values(1, 'aa ' , 1)
insert #出货表 values(2, 'aa ' , 2)
insert #出货表 values(3, 'aa ' , 4)
insert #出货表 values(4, 'aa ' , 4)
go

select tb.编号,
tb.品名,
[数量]=sum(case when tb.出货sum <ta.进货sum then tb.出货sum else ta.进货sum end
-
case when tb.出货sum-tb.数量 <ta.进货sum-ta.数量 then ta.进货sum-ta.数量 else tb.出货sum-tb.数量
end),
ta.单价
from
(select *,进货sum=(select sum(数量) from #进货表 where 品名=a.品名 and 编号!> a.编号)
from #进货表 a
)ta
join
(select *,出货sum=(select sum(数量) from #出货表 where 品名=b.品名 and 编号!> b.编号)
from #出货表 b ) tb
on ta.品名=tb.品名 and
tb.出货sum-tb.数量 <ta.进货sum and ta.进货sum-ta.数量 <tb.出货sum
group by ta.单价,tb.品名,tb.编号

go

编号 品名 数量 单价
----------- ---------- ----------- -----------
1 aa 1 500
2 aa 2 500
3 aa 2 500
3 aa 2 510
4 aa 3 510
4 aa 1 530

(所影响的行数为 6 行)

热点排行