首页 新闻 会员 周边

sqlserver中合同匹配

0
悬赏园豆:20 [已解决问题] 解决于 2015-09-06 21:12

逾期表A                                        催收人员等级表B
合同ID 门店ID 产品ID 逾期等级ID       人员ID 门店ID 催收产品ID 逾期等级ID
012       001      01     1                    101       001     01              1
224       001      01     2                    302       001     01              1
031       001      01     1                    503       002     02              2
094       002      01     2                    104       003     02              3
095       003      02     3                    705       004     03              4
066       004      03     4                    906       001     01              2
077       001      01     1                    407       001     02              3

                                                      208       002     01              2

                                                      909       001     01              2

 

表C
合同ID    人员ID


sqlserver请问怎么把表A 的合同到表B匹配然后插入表C中,
注意:表A中有相同门店,相同产品,相同逾期等级。
不要考虑表A,表B的数量,直接分配就好,表A总的逾期合同,在表B中都有相对应的人
表B中也有多个负责催收相同门店,相同产品,相同逾期等级的人,
同一个人可以负责多个,产品,多个等级
请将合同平均匹配给负责相同(门店,产品,逾期等级的人),不能平均分配的随机分配。
比如:表A有10个相同的合同,表B中满足条件的催收人只有3个,
那么就是先平均分配在把余下的1个随机分配,保证不重复分配给这个人员
请将合同全部分完

ouyangdu的主页 ouyangdu | 初学一级 | 园豆:6
提问于:2015-09-05 22:42
< >
分享
最佳答案
0

SELECT ROW_NUMBER() OVER(ORDER BY [合同ID]) rowid,* INTO #temp1 FROM A
SELECT *,0 AS flag INTO #temp2 FROM B

DECLARE @cnt INT,@index INT,@flag INT,@pid VARCHAR(20)
SELECT @cnt=MAX(rowid),@index=0 FROM #temp1
CREATE TABLE #result([合同ID] INT,[人员ID] VARCHAR(20))
WHILE @index<@cnt
BEGIN
SET @index=@index+1
SELECT @flag=MIN(t2.flag) FROM #temp1 t1,#temp2 t2 WHERE t1.rowid=@index AND t1.[门店ID]=t2.[门店ID] AND t1.[产品ID]=t2.[催收产品ID] AND t1.[逾期等级ID]=t2.[逾期等级ID]
PRINT @flag
IF @flag IS NOT NULL
BEGIN
SELECT @pid=MIN(t2.[人员ID]) FROM #temp1 t1,#temp2 t2 WHERE flag=@flag AND t1.rowid=@index AND t1.[门店ID]=t2.[门店ID] AND t1.[产品ID]=t2.[催收产品ID] AND t1.[逾期等级ID]=t2.[逾期等级ID]
INSERT INTO #result( [合同ID], [人员ID] ) SELECT [合同ID],@pid FROM #temp1 WHERE rowid=@index
UPDATE #temp2 SET flag=flag+1 WHERE [人员ID]=@pid
END
END
SELECT * FROM #result

收获园豆:20
小白菜T | 小虾三级 |园豆:564 | 2015-09-06 10:33

不好意思,合同id,以及人员ID是没有规律的,是我没写清楚,另外这样分可能会出现重复吗?

ouyangdu | 园豆:6 (初学一级) | 2015-09-06 22:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册