SQL数据复制查询

时间:2016-10-13 10:34:59

标签: sql sql-server-2012 duplicates self-join

当天的问候!!!!

我有一张表有多列不同状态的数据。

假设我有500行数据,其中包含状态'有效'我有'chkDuplicate'的150行数据。

现在我必须编写查询,通过比较地址,城市,州等重复的几列,将这150条记录状态更新为有效或无效。

如何实现这一点,它还需要支持大数据表。

提前致谢....

表定义

CREATE TABLE XYZ
(
  ID bigint,
  ADDRESS navrchar,
  CITY navrchar,
  STATE nvarchar,
  ZIP nvarchar,
  STATUS
)

状态应根据重复查询进行更新。

重要!!!! 对于重复数据,第一条记录应该有效,其他记录应该无效。如果再次重新处理无效数据,则不应干扰有效记录。

enter image description here

如果我运行查询,上面的表应该是相同的。记录1,3应该是成功,3,4应该是'重复'。即使我已经添加了更少的1,3个总是在成功,其他重复项应该更新为“复制”。

2 个答案:

答案 0 :(得分:0)

此查询返回了重复的行。

  select tbl.data1, tbl.data2, tbl.data3
from TestTable1 tbl
inner join (
    SELECT data1 , data2, data3 , COUNT(*) AS dupCount
    FROM TestTable1
    GROUP BY data1, data2, data3
    HAVING COUNT(*) > 1
) oc on tbl.data1 = oc.data1 and tbl.data2 = oc.data2 and tbl.data3 = oc.data3

然后使用Cursor并更新重复行

Cursor Expamle

答案 1 :(得分:0)

为ORDER BY子句添加了ID,即使我多次重复处理重复调用,它也适用于我。

WITH TABLE_DATA_DUPLICATE AS

(SELECT *,ROW_NUMBER()OVER(

  PARTITION BY STREET1,CITY,STATE,ZIP

  ORDER BY STREET1,CITY,STATE,ZIP,ID

)NO_OF_REPEATS

FROM YOURTABLE(NOLOCK))

UPDATE TABLE_DATA_DUPLICATE SET STATUS =(例如NO_OF_REPEATS = 1那么'有效'''''''''''''''''''

感谢大家的支持....干杯!!!!