Loops 使用While循环将销售人员分配给具有更新的客户
我曾尝试编写一个语句,可以将销售人员(如Loops 使用While循环将销售人员分配给具有更新的客户,loops,join,for-loop,while-loop,Loops,Join,For Loop,While Loop,我曾尝试编写一个语句,可以将销售人员(如S1、S2、S3分配给具有WHILE LOOP的多个客户,但该语句使用相同的销售人员ID更新所有客户 我想做的是将一名销售人员,如S1、S2、S3分配给一名客户,如C1、C2、…C9、C10。分配给客户的第一条记录不应是分配给最后一条客户记录的销售人员。例如,如果现有客户表中的最新记录为 Cust_ID Cust_Name Cust_SalesP Cust_CreatedDate Cust_UpdatedDate
S1、S2、S3
分配给具有WHILE LOOP
的多个客户,但该语句使用相同的销售人员ID更新所有客户
我想做的是将一名销售人员,如S1、S2、S3
分配给一名客户,如C1、C2、…C9、C10
。分配给客户的第一条记录不应是分配给最后一条客户记录的销售人员。例如,如果现有客户表中的最新记录为
Cust_ID Cust_Name Cust_SalesP Cust_CreatedDate Cust_UpdatedDate
'097' 'John Doe' 'S2' '2014-01-15 16:59:43.000' '2015-01-15 16:59:43.000'
然后分配给下一个客户的下一个销售人员应该是S3
。如果有大量客户等待分配,则应根据S1、S2、S3
顺序分配他们,直到记录的最后一行
基于我上面提到的竞争场景是这样的:客户098
分配给S3
,099
分配给S1
,0100
分配给S2
,0101
分配给S3
,0102
分配给S1
,0103
被分配给S2
,依此类推
以下是示例表:
Table A: Customer (Columns include Cust_ID, Cust_Name, Cust_SalesP, Cust_CreatedDate, Cust_UpdatedDate)
Table B: Salesperson (Columns include SalesP_ID, SalesP_CreatedDate, SalesP_UpdatedDate)
“…但该声明使用相同的销售人员ID更新所有客户…”
很可能,您正在编写一个
Update
语句,但没有WHERE
条件 如果您正在寻找一个纯粹基于SQL的解决方案,只需声明一个int变量来表示您的销售人员,并在循环中每次向其添加1即可。要重置它,您只需使用If…Else来检查当前数字,并在循环的下一次迭代之前将其重置为1
也许是这样的:
DECLARE @cust_id INT
DECLARE @sales_number INT
SET @sales_number = 1
DECLARE C1 CURSOR READ_ONLY
FOR
SELECT [Cust_ID]
FROM Customers
WHERE Cust_SalesP IS NULL
OPEN C1
FETCH NEXT FROM C1 INTO
@cust_id
WHILE @@FETCH_STATUS = 0
BEGIN
exec sp_executesql 'UPDATE Customers set Cust_SalesP =''S'+sales_number + '''
WHERE Cust_ID = '+@cust_id
IF @sales_number = 3
SET @sales_number = 1
ELSE
SET @sales_number = @sales_number + 1
FETCH NEXT FROM C1 INTO
@cust_id
END
CLOSE C1
DEALLOCATE C1
你在用什么编程语言?你能展示一下你为提供更多的上下文所做的尝试吗?它是T-SQL。下面是我尝试做的:通过Cust\u updatedate desc OPEN custsassignment\u cursor为select*从客户订单声明custsassignment\u cursor;从CUSTU游标获取下一个;当@@FETCH\u STATUS=0开始更新客户集Cust\u SalesP=(当Cust\u Id='S1'时为'S2',当Cust\u Id='S2'时为'S3',当Cust\u Id='S3'时为'S1'结束)从custsignment\u游标获取下一个;结束;关闭CUSTU光标;取消分配CUSTU游标;去