--物品裝箱問題
/*
http://topic.csdn.net/u/20100703/16/bcc2efaf-5aee-424d-b022-473282a168ae.html?seed=657778656&r=66694963#r_66694963
有一個表,欄位為:物品名,件數。
記錄: 物A 54
物B 35
物C 23
物D 98
物E 43
現要對這些物品統一裝箱,統一裝60個一箱,那麼第一箱物A裝54個,物B裝6個,第二箱物B裝29個,物C裝23個,物D裝8個,依此類推。
請問怎麼解決?
*/
if object_id('[tb]') is not null drop table [tb]
go
create table [tb](物品名 varchar(10),件數 int)
insert [tb]
select '物A', 54 union all
select '物B', 35 union all
select '物c', 23 union all
select '物d', 98 union all
select '物e', 43
go
set nocount on
declare @物品 varchar(10),@數量 int,@箱號 int,@剩餘 int
declare @t table(箱號 int,物品 varchar(10),數量 int)
declare cur cursor for select * from tb
open cur
fetch cur into @物品,@數量
set @箱號=1
while @@fetch_status=0
begin
while 1=1
begin
select @剩餘=isnull(sum(數量),0) from @t where 箱號=@箱號
if @數量>60 - @剩餘
begin
set @數量=@數量-(60 - @剩餘)
insert @t select @箱號, @物品,60 - @剩餘
set @箱號=@箱號+1
end
else
begin
insert @t select @箱號,@物品,@數量
break
end
end
fetch cur into @物品,@數量
end
close cur
deallocate cur
select * from @t
/*
箱號 物品 數量
----------- ---------- -----------
1 物A 54
1 物B 6
2 物B 29
2 物c 23
2 物d 8
3 物d 60
4 物d 30
4 物e 30
5 物e 13
*/