这是我的情况。
TABLE1:
DOCUMENT_ID,
GUID
TABLE2:
DOCUMENT_ID,
FILE
表格由DOCUMENT_ID
加入,这意味着TABLE2
可以有一行或多行具有相同的DOCUMENT_ID
。
我的问题是,TABLE2
的整群DOCUMENT_ID
值具有相同的FILE
值。
我需要一个SQL查询,它会让我全部GUID
,并计算TABLE2
中DOCUMENT_ID
的{{1}}行中有多少行具有相同的FILE
值(以便我可以将GUID
复制到Excel。
然后我需要为这些案例更新TABLE2
的{{1}}列。
例如,如果FILE
在DOCUMENT_ID
中有三行且TABLE2
值相同,我需要通过添加FILE
等{{1}后缀来更新其中两行等等。
希望我有意义。
所有专家都提前感谢你。
答案 0 :(得分: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添加为主键的占位符。您需要一种方法来识别要更新的记录。
答案 1 :(得分:0)
这将为您提供所有具有多个Document_id
的文件Select FILE, COUNT(DOCUMENT_ID) as DOCUMENT_ID from table2
group by FILE
Having count(DOCUMENT_ID)>1
答案 2 :(得分: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
答案 3 :(得分:0)
我有一种方法,但不确定它是否可行。但请允许我向您保证,这是一种非常有效的方法。您可以创建具有标识列的表,并将整个数据插入该表中。从那里开始处理任何重复数据都是孩子的游戏。 有两种方法可以将标识列添加到具有现有数据的表中:
使用标识创建一个新表,将数据复制到此新表,然后删除现有表,然后重命名临时表。
使用identity&创建一个新列删除现有列
作为参考,我找到了两篇文章:
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/