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