如此SQL語句能否實現?
表A
CNo SeqNo sNum dNum
A 1 20
A 2 50
A 3 30
表B
CNo Num
A 80
需得到的結果:
CNo SeqNo sNum dNum
A 1 20 20
A 2 50 50
A 3 30 10
也就是依次更新A表中的dNum的值,當B表中的Num大於等B表的數時,A表中的dNum=sNum,當小於時A中的dNum等於B表中的Num(余下的數)
------解决方案--------------------當然可以
------解决方案--------------------create table 表A(CNo varchar(100), SeqNo int, sNum int, dNum int)
insert into 表A select 'A ', 1, 20,null
insert into 表A select 'A ', 2, 50,null
insert into 表A select 'A ', 3, 30,null
create table 表B (CNo varchar(100), Num int)
insert into 表B select 'A ', 80
select *
from 表A
update 表A set dNum =
case
when sNum <B.Num-isnull((select sum(sNum) from 表A where CNo=a.CNo and SeqNo <a.SeqNo),0) then sNum
else isnull((B.Num-(select sum(sNum) from 表A where CNo=a.CNo and SeqNo <a.SeqNo)),0)
end
from 表A as a
inner join 表B as b on a.CNo=B.CNo
select *
from 表A
drop table 表A,表B
------解决方案--------------------declare @i int
update A,B set A.dNum=case @i=((@i=B.Num)-A.sNum) when > 0 then A.sNum else @i where A.CNo=B.CNo
试试.
------解决方案--------------------declare @A table(CNo char(1), SeqNo int, sNum int, dNum int)
insert @A
select 'A ', 1,20,null union all
select 'A ', 2,50,null union all
select 'A ', 3,30,null
declare @B table(CNo char(1), Num int)
insert @B
select 'A ',80
--这是SELECT
select a.CNo,a.SeqNo,a.sNum,
dNum=
case
when b.Num> (select sum(sNum) from @A where SeqNo <=a.SeqNo)
then (select sum(sNum) from @A where SeqNo <=a.SeqNo)
else
b.Num - (select sum(sNum) from @A where SeqNo <a.SeqNo)
end
from @A a, @B b where a.Cno = b.Cno
/*
A 1 20 20
A 2 50 70
A 3 30 10
*/
--这是UPDATE
update a set a.dNum =
case
when b.Num> (select sum(sNum) from @A where SeqNo <=a.SeqNo)
then (select sum(sNum) from @A where SeqNo <=a.SeqNo)
else
b.Num - (select sum(sNum) from @A where SeqNo <a.SeqNo)
end
from @A a, @B b where a.Cno = b.Cno
select * from @A
/*
A 1 20 20
A 2 50 70
A 3 30 10
*/