日期:2014-05-18  浏览次数:20489 次

请教一下如何提高效率解决如下问题。
查询到总额明细

编号 数量
A 300
B 400
C 500

分配到如下明细
编号 限额 分配数量
A-1 100 100
A-2 50  50
A-3 800 150

B-1 300 300
B-2 100 100

C-1 300 300
C-2 500 500

总额明细减少时,分配配的明细也会相应减少,意思将刚才的进程还要退回。

------解决方案--------------------
--是个先进先出吧?
如果是:
C 2 500 500
那么你这个结果不对吧?
应该是:
C 2 500 200

SQL code
create table t1(编号 varchar(10),数量 int)
insert into t1 values('A',300)
insert into t1 values('B',400)
insert into t1 values('C',500)
create table t2(编号 varchar(10), 序号 int,限额 int,分配数量 int)
insert into t2 values('A',1,100,null)
insert into t2 values('A',2,50,null)
insert into t2 values('A',3,800,null)
insert into t2 values('B',1,300,null)
insert into t2 values('B',2,100,null)
insert into t2 values('C',1,300,null)
insert into t2 values('C',2,500,null)
go

select t.编号 , t.序号 , t.限额 ,分配数量=
       (case when (select sum(限额) from t2 where 编号 = t.编号 and 序号 <= t.序号) <= t1.数量 then t.限额 
             when (select sum(限额) from t2 where 编号 = t.编号 and 序号 <= t.序号) - t1.数量 <= t.限额 then t1.数量 - ((select sum(限额) from t2 where 编号 = t.编号 and 序号 <= t.序号) - t.限额) 
             else 0
       end)
from t2 t , t1
where t.编号 = t1.编号

drop table t1 , t2

/*
编号         序号          限额          分配数量        
---------- ----------- ----------- ----------- 
A          1           100         100
A          2           50          50
A          3           800         150
B          1           300         300
B          2           100         100
C          1           300         300
C          2           500         200

(所影响的行数为 7 行)

*/