SQL Server 用update来实现分配问题
由于没有积分只能这里提个问,请大家见谅!如下列说名:
我有一个表#A
/////////////#A//////////////////////////////////////////////////////
Create Table #A(zID int,num int,FPNum int)
insert into #A(zID,num)
select 1,1
union all
select 1,2
union all
select 1,3
union all
select 1,4
union all
select 2,4
union all
select 2,2
union all
select 2,1
union all
select 3,3
union all
select 3,4
////////////////////////////////////////////////////
--表 #B
Create Table #B(zID int,num int)
insert into #B(zID,num)
select 1,6
union all
select 2,3
union all
select 3,5
///////////////////////////////////////////////////////////
#A表与#B表的关联字段 是ZID;只用UpDate语句来实现 将#B中的num分配到#A表中数量。
比如#B表的ZID为1,num为6 分配到#A表中的ZID为1的记录上面就是如下结果
#A : ZID Num FPNum(这个字段是分配过来的结果)
1 1 1
1 2 2
1 3 3
1 4
那么同样#B表的ZID为12,num为3 分配到#A表中的ZID为2的记录上面就是如下结果
#A : ZID Num FPNum(这个字段是分配过来的结果)
2 4 3
2 2
2 1
分配原则 :(#A.zID=#B.zID关联)#B中的num没有分配完就分配到#A中分配完了就不分配了,#B中的num值在#A中分配完了都还有剩余那么也不分配。
我想要得到分配后的结果如下所示:
#A : ZID Num FPNum(这个字段是分配过来的结果)
1 1 1
1 2 2
1 3 3
1 4 null
2 4 3
2 2 null
2 1 null
3 3 3
3 4 2
上面的分配 我用一次游标循环已经实现,不用游标,只用Update该如何实现呢,请知道的大虾贴下代码。
用游标循环数据量小还可以接受,要是数据大一次性循环几万次游标 就是相当的慢。
------解决方案--------------------SQL code
--分配结果
zID num FPNum iTag iBNum iCount
1 1 1 1 6 1
1 2 2 2 6 3
1 3 3 3 6 6
1 4 NULL 4 6 10
2 4 3 5 3 4
2 2 NULL 6 3 6
2 1 NULL 7 3 7
3 3 3 8 5 3
3 4 2 9 5 7