在SQL查询中实现循环逻辑

Kie*_*ith 2 sql sql-server sql-server-2008

我试图在SQL查询中实现一些逻辑来创建一个类似于以下的表:

CountNum  Identifier
20         a
40         a
60         a
20         b
40         b
20         c
20         d
40         d
20         e
40         e
60         e
80         e
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,逻辑是这样的,只要Identifer保持不变,CountNum就会向下一条记录添加20.如果标识符发生变化,则从20开始.

到目前为止,我已经实现了以下伪代码:

Do the following for all records:
Update table set CountNum=20 for first Identifier
If Identifier is duplicated, add 20 to CountNum for each duplicate.
Run Code Online (Sandbox Code Playgroud)

无论如何在SQL服务器中实现这个作为查询?

我也试图将结果移动到一个新表中.我试过了:

INSERT INTO tblPayments select Identifier AS PaymentsIdentifier
ROW_NUMBER() OVER(PARTITION BY Identifier ORDER BY Identifier)*20 CountNum
FROM dbo.oldPayments
Run Code Online (Sandbox Code Playgroud)

但是它会生成错误:

Column name or number of supplied values does not match table definition.
Run Code Online (Sandbox Code Playgroud)

Lam*_*mak 5

根本不需要循环,您可以使用ROW_NUMBER():

SELECT Identifier,
       ROW_NUMBER() OVER(PARTITION BY Identifier ORDER BY Identifier)*20 CountNum
FROM dbo.YourTable;
Run Code Online (Sandbox Code Playgroud)