2012-07-20 99 views
-1

这是我的情况。如何查找相关表中的重复值并更新它们

TABLE1:

DOCUMENT_ID, 
GUID 

TABLE2:

DOCUMENT_ID, 
FILE 

该表由DOCUMENT_ID接合,这意味着TABLE2可以具有相同DOCUMENT_ID一个或多个行。

我的问题是TABLE2整个一堆DOCUMENT_ID值有相同的FILE值。

我需要一个SQL查询,将得到我所有GUIDTABLE2这个DOCUMENT_ID算多少行具有完全相同的FILE值(这样我就可以复制GUID到Excel)。

然后我需要更新TABLE2FILE列这些情况下。

例如,如果DOCUMENT_IDTABLE2三行相同FILE价值,我需要通过添加一个后缀像FILEVALUE-1FILEVALUE-2等来更新他们两个。

希望我有道理。

致各位专家提前致谢。

回答

1

为了得到重复,你可能会采用老派组通过:

select table1.guid, table1.document_id, table2.[file], count(*) cnt 
    from table1 
inner join table2 
    on table1.document_id = table2.document_id 
group by table1.guid, table1.document_id, table2.[file] 
having count (*) > 1 

要直接更新重复项,您可以使用CTE:

; with t2 as (
    select id, 
      [file], 
      row_number() over (partition by document_id, [file] 
           order by id) rn 
     from table2 
) 
update t2 
    set [file] = [file] + '-' + convert(varchar(10), rn - 1) 
where t2.rn > 1 

请注意,我已将ID添加为主键的占位符。您需要一种方法来识别要更新的记录。

There is live test @ Sql Fiddle

+0

hvala Nikola ... – no9 2012-07-23 09:19:06

+0

@ no9 - Molim :-) – 2012-07-23 09:25:20

0

这将让你有超过所有文件DOCUMENT_ID

Select FILE, COUNT(DOCUMENT_ID) as DOCUMENT_ID from table2 
group by FILE 
Having count(DOCUMENT_ID)>1 
+0

你没有得到我的权利。我需要在相关表2的字段FILE中具有多个相同值的所有GUID。 – no9 2012-07-20 09:04:10

0

您可以使用CTE从TABLE2找出重复的值:

WITH CTE_1 (DOCUMENT_ID,FILE, DuplicateCount) 
AS 
(
SELECT DOCUMENT_ID,FILE, 
ROW_NUMBER() OVER(PARTITION BY DOCUMENT_ID,FILE ORDER BY DOCUMENT_ID) AS DuplicateCount 
FROM table2 
) 
select * 
FROM CTE_1 
WHERE DuplicateCount >1 
+0

不错的方法,但它不能正常工作。检查结果:--- 41592 038125(2).TIF 2 --- --- 41592 038125(2).TIF \t 3 --- --- 41592 038125.TIF 2 --- --- 41592 038125.TIF 3 --- --- 41592 038125.TIF 4 --- ...结果以不同的计数“重复”。 – no9 2012-07-20 09:36:26

+0

FILE列是一种varchar? – 2012-07-20 09:42:08

+0

它是..其档案名称 – no9 2012-07-20 10:06:49

0

我有1个方法记住,但不确定它是否可行。但让我向你保证,这是一个非常有效的方法。您可以创建一个具有标识列的表格,并在该表格中插入整个数据。从那里处理任何重复的数据是一个孩子的玩耍。 有与现有的数据相加标识列一个表的方法有两种:

  1. 创建标识新表,将数据复制到这个新表,然后删除现有的表,然后重命名临时表。

  2. 创建标识的新列&删除现有列

,以供参考,我发现2篇: http://blog.sqlauthority.com/2009/05/03/sql-server-add-or-remove-identity-property-on-column/
http://cavemansblog.wordpress.com/2009/04/02/sql-how-to-add-an-identity-column-to-a-table-with-data/

相关问题