逾期表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个随机分配,保证不重复分配给这个人员
请将合同全部分完
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
不好意思,合同id,以及人员ID是没有规律的,是我没写清楚,另外这样分可能会出现重复吗?