表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的容器数量(容器个数)
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的容器数量(容器个数)
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
建议用程序去做.
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 容器编码
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行')' 附近有语法错误。