我几乎可以肯定这是不可能的,但我常常对SQL语言的强大感到惊讶,我以为我会问,因为这会节省我数周的工作量
我们假设你有一个这样的表,随机数量的重复记录:
First Last Title Grade Replicate
Mike Smith Manager 2 1
Jenn Jones Sales 1 1
Bill Bennett CEO 2 1 1
Jeff Miller Sales 4 1
Harry James Manager 6 1
Beth Samuals Dock 1 1
Cathy Gordon Sales 2 1
Bill Bennett CEO 2 1 1
Jeff Miller Sales 4 1
Harry James Manager 6 1
Beth Samuals Dock 1 1
Cathy Gordon Sales 2 1
Bill Bennett CEO 2 1 1
Jeff Miller Sales 4 1
Harry James Manager 6 1
Jeff Miller Sales 4 1
Harry James Manager 6 1
'复制'字段是为了使这些记录独特。每次找到新的副本时,重复项需要增加1,以便其他记录可以重复,但重复字段将包含1,2,3 ....等等。
这是我的问题的一个简化示例 - 在包含约30个字段的表格中约有40,000条记录,并且使用“复制”字段必须使16个字段成为唯一的。领域。按照16'唯一性排序它们'当然,田地很容易。但有没有办法告诉SQL更新复制字段,每次发现重复时添加一个?
正如我所说的那样,我怀疑这是不可能的,或者如果是的话,解决方案超出了我的技能水平,但我之前已经错了。
感谢。
答案 0 :(得分:1)
您可以使用ROW_NUMBER()
:
;WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY [First],[Last],[Title],[Grade] ORDER BY Replicate) AS UPD_Replicate
FROM Table1
)
SELECT *
FROM cte
演示:SQL Fiddle
或UPDATE
字段:
;WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY [First],[Last],[Title],[Grade] ORDER BY Replicate) AS UPD_Replicate
FROM Table1
)
UPDATE cte
SET Replicate = UPD_Replicate
ROW_NUMBER()
函数为每一行分配一个数字。 PARTITION BY
是可选的,但用于为给定组中的每个值开始编号,即:如果您PARTITION BY Some_Date
,那么对于每个唯一日期值,编号将从1开始。{{1}当然用于定义计数应该如何进行,并且在ORDER BY
函数中是必需的。