Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用While循环将销售人员分配给具有更新的客户_Loops_Join_For Loop_While Loop - Fatal编程技术网

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游标;去