【求助】如何达到我想要的效果

mathsfan 2011-09-16 09:32:48
create table tabTempDDD(i int identity(1,1),cMateNo varchar(50),nQty numeric(12,4),n2 numeric(12,4))
create table tabTempDDD2(i int identity(1,1),cMateNo varchar(50),nQty numeric(12,4))
insert into tabTempDDD select 'a',2,null union all select 'a',3,null union all select 'a',4,null
insert into tabTempDDD2 select 'a',6
tabTempDDD
1 a 2.0000 NULL
2 a 3.0000 NULL
3 a 4.0000 NULL
4 b 4.0000 NULL
tabTempDDD2
1 a 6.0000
2 b 3.0000
如何将tabTempDDD表中的最后一列更新为如下:
1 a 2.0000 2
2 a 3.0000 3
3 a 4.0000 1
4 b 4.0000 3
即最后一列按cMateNo汇总以后的和等于第二个表中的值?
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mathsfan 2011-09-16
  • 打赏
  • 举报
回复
不错...
playwarcraft 2011-09-16
  • 打赏
  • 举报
回复
Update A
set [n2] = case when (select sum(nQty) from tabTempDDD where cMateNo=A.cMateNo and i<=A.id) <= isnull(B.nQty,0)
then A.nQty
else
case when isnull((select sum(nQty) from tabTempDDD where cMateNo=A.cMateNo and i<A.id),0) >=isnull(B.nQty,0)
then 0
else isnull(B.nQty,0)-isnull((select sum(nQty) from tabTempDDD where cMateNo=A.cMateNo and i<A.id),0)
end
end

from tabTempDDD A
left join tabTempDDD2 B
on A.cMateNo=B.cMateNo
mathsfan 2011-09-16
  • 打赏
  • 举报
回复
a三条记录2,3,4,而另一个表记录a需要更新的总和为6,按顺序分配,2,3,1,第一个最多只能分配到2,还剩下4,第二个最多分配到3,还剩下1就分配到最后一条记录了,要保证按顺序分配完啊...
--小F-- 2011-09-16
  • 打赏
  • 举报
回复
2 a 3.0000 3

这样的对应关系是什么??


必须要是 2,3,1的顺序么?
mathsfan 2011-09-16
  • 打赏
  • 举报
回复
需要按照顺序更新...
NBDBA 2011-09-16
  • 打赏
  • 举报
回复
你的结果不唯一?

1 a 2.0000 2
2 a 3.0000 2
3 a 4.0000 2
4 b 4.0000 3

行不行,你的规则有缺失

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧