表1容器编码       容量kg
01            0-200
02            0-300
03            100-300
04            150-380
表2
日期           货物     数量kg
2010-01-01     大米      100
2010-01-02     面粉      300      
2010-01-03     油        200
2010-01-04     大米      150
2010-01-05     面粉      350
求SQL语句或存储过程:用表1中的容器容装表2中的数量(如是货物相同,当前一个容器未满的情况下可继续容装下一日(次)的货物),分别需要表1的容器数量(容器个数)

解决方案 »

  1.   

    create table #t (容器编码 ,容量kg1,容量kg2, 剩余,货物)
    insert into #t (容器编码 ,容量kg1,容量kg2)select 容器编码 ,left(容量kg,charindex('-',容量kg)-1),right (容量kg,len(容量kg)-charindex('-',容量kg)) from  表1declare @货物 varchar(10),@数量kg int
    declare cur cursor for select 货物 ,数量kg from  表2
    open cur
    fetch next from cur into @货物,@数量kg
    while @@fetch_status=0
    begin
    .....
    end
      

  2.   

    用SQL来做,太难.
    建议用程序去做.
      

  3.   


    create table #t (容器编码 varchar(10) ,容量kg1 int ,容量kg2 int, 剩余 int ,货物 varchar(10))
    insert into #t (容器编码 ,容量kg1,容量kg2)select 容器编码 ,left(容量kg,charindex('-',容量kg)-1),right (容量kg,len(容量kg)-charindex('-',容量kg)) from  表1select 货物,SUM(数量) as 数量
    into #temp
    from 表2 group by 货物select 货物,数量,
    (select top 1 容器编码 from #t where #temp.数量 between 容量kg1 and 容量kg2 order by 容器编码 desc) as 容器编码
    into #temp2
    from #temp group by 货物select 容器编码,sum(case when a.数量%b.容量kg2=0 then a.数量/b.容量kg2 else (a.数量/b.容量kg2)+1) as 容器数量
    from #temp2 a
    left join #t b on a.容器编码=b.容器编码
    group by 容器编码
      

  4.   


    select 容器编码,sum(case when a.数量%b.容量kg2=0 then a.数量/b.容量kg2 else (a.数量/b.容量kg2)+1) as 容器数量
    from #temp2 a
    left join #t b on a.容器编码=b.容器编码
    group by 容器编码第1行')' 附近有语法错误。
      

  5.   

    用VB,C++等是很容易的,用SQL 也能做,但是有难度D!