SSMS T-SQL设置重复行号的列

时间:2014-12-14 00:43:31

标签: sql-server ssms

我有一个大约有1000万行(和20列 - 大约4 GB)的数据库,其中大约10%的行具有重复的列。数据库位于SQL Server 2014 Express中并使用SSMS。

我创建了一个新列CNT(int,null)来计算我有重复ID的每一行的出现次数。期望的结果看起来像:

ID     CNT
100    1
100    2
101    1
102    1
102    2
103    1
104    1

不熟悉高级SQL功能我做了一些研究,并提出使用CTE设置CNT列。在一个小型测试台上工作得很好 - 但显然这不是一个大桌子的方法(我在一个相当不错的系统上杀了5个多小时后就杀了它。)

以下是我尝试实施的代码:

with CTE as
(select dbo.database.id, dbo.database.cnt,
 RN = row_number() over (partition by id order by id)
 from dbo.databasee)
update CTE set CNT = RN

列ID的类型为Int。所有列都允许空值 - 没有键或索引列。

1 个答案:

答案 0 :(得分:2)

编辑:马丁是对的,我现在只能提供比CTE更多的替代解决方案。创建一个与旧表完全相同的新表,并将旧表的数据插入其中。

INSERT INTO newTable
SELECT ID, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID)
FROM oldTable;

然后你可以删除你的旧表。绝对不是一个完美的解决方案,但它应该有效。