我正在尝试在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

如您所见,逻辑是这样的,只要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.

反正有实现SQL Server中的查询吗?

我还试图将结果移到新表中。我努力了:
INSERT INTO tblPayments select Identifier AS PaymentsIdentifier
ROW_NUMBER() OVER(PARTITION BY Identifier ORDER BY Identifier)*20 CountNum
FROM dbo.oldPayments

但是,它会产生错误:
Column name or number of supplied values does not match table definition.

最佳答案

完全不需要循环,可以使用ROW_NUMBER():

SELECT Identifier,
       ROW_NUMBER() OVER(PARTITION BY Identifier ORDER BY Identifier)*20 CountNum
FROM dbo.YourTable;

关于sql - 在SQL查询中实现循环逻辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30400365/

10-14 18:31
查看更多