declare @ta table(id int,入数量 int,入单价 int ,出数量 int,出单价 int,结存数 int,结存金额 int)
insert @ta select 1,0,0,0,0,20,30
union all select 2,3,6,5,6,0,0
union all select 3,5,6,6,7,0,0
union all select 4,5,3,7,8,0,0
union all select 5,5,2,0,2,0,0 select * from @ta
/*--上面是测试环境已建好
实现功能:更新所有的结存数量+金额列.
要 求:1条Update语句,不使用辅助变量
*/之前的一贴没把表贴出来,其实就是现在这张表,疑惑在于:一个UPDATE中不能完全通过上一行来计算。
http://topic.csdn.net/u/20091226/16/e876be18-9327-481c-9d32-a92b76547e14.html?seed=924913734&r=62243824#r_62243824
insert @ta select 1,0,0,0,0,20,30
union all select 2,3,6,5,6,0,0
union all select 3,5,6,6,7,0,0
union all select 4,5,3,7,8,0,0
union all select 5,5,2,0,2,0,0 select * from @ta
/*--上面是测试环境已建好
实现功能:更新所有的结存数量+金额列.
要 求:1条Update语句,不使用辅助变量
*/之前的一贴没把表贴出来,其实就是现在这张表,疑惑在于:一个UPDATE中不能完全通过上一行来计算。
http://topic.csdn.net/u/20091226/16/e876be18-9327-481c-9d32-a92b76547e14.html?seed=924913734&r=62243824#r_62243824
insert @tB select 1,0,0,0,0,20,30
union all select 2,3,6,5,6,0,0
union all select 3,5,6,6,7,0,0
union all select 4,5,3,7,8,0,0
union all select 5,5,2,0,2,0,0
UPDATE B
SET
结存数=(SELECT SUM(结存数+入数量-出数量) FROM @TB WHERE ID<=B.ID),
结存金额=(SELECT SUM(结存金额+(入数量*入单价-出数量*出单价)) FROM @TB WHERE ID<=B.ID) FROM @TB BSELECT * FROM @TB
(所影响的行数为 5 行)
(所影响的行数为 5 行)id 入数量 入单价 出数量 出单价 结存数 结存金额
----------- ----------- ----------- ----------- ----------- ----------- -----------
1 0 0 0 0 20 30
2 3 6 5 6 18 18
3 5 6 6 7 17 6
4 5 3 7 8 15 -35
5 5 2 0 2 20 -25(所影响的行数为 5 行)???
SET 结存数=(B.结存数+A.入数量-A.出数量),
结存金额=(B.结存金额+A.入数量*A.入单价-A.出数量*A.出单价)
FROM @ta A,@ta B
WHERE A.ID=B.ID+1我主要是不明白:
...TNND,我上面这句为什么只有第二行刷成了...后面的都不成...要么他丫就一个不成还好理解一些..
呵呵。楼上各位,谢谢回贴。
..
折腾了半天才说明白...我的语言表达真的出问题了。
id id
1 Null
2 1
3 2...
insert @ta select 1,0,0,0,0,20,30
union all select 2,3,6,5,6,0,0
union all select 3,5,6,6,7,0,0
union all select 4,5,3,7,8,0,0
union all select 5,5,2,0,2,0,0 --查询
select id ,入数量 ,入单价 ,出数量 ,出单价,
结存数 =(select sum(结存数 + 入数量 - 出数量) from @ta where id <= t.id),
结存金额 = (select sum(结存金额 + 入数量*入单价 - 出数量*出单价) from @ta where id <= t.id)
from @ta t
/*
id 入数量 入单价 出数量 出单价 结存数 结存金额
----------- ----------- ----------- ----------- ----------- ----------- -----------
1 0 0 0 0 20 30
2 3 6 5 6 18 18
3 5 6 6 7 17 6
4 5 3 7 8 15 -35
5 5 2 0 2 20 -25(所影响的行数为 5 行)*/--更新
update @ta
set 结存数 =(select sum(结存数 + 入数量 - 出数量) from @ta where id <= t.id),
结存金额 = (select sum(结存金额 + 入数量*入单价 - 出数量*出单价) from @ta where id <= t.id)
from @ta tselect * from @ta
/*
id 入数量 入单价 出数量 出单价 结存数 结存金额
----------- ----------- ----------- ----------- ----------- ----------- -----------
1 0 0 0 0 20 30
2 3 6 5 6 18 18
3 5 6 6 7 17 6
4 5 3 7 8 15 -35
5 5 2 0 2 20 -25(所影响的行数为 5 行)
*/