需要为 SQL Server 中另一个值重复的记录更新一列 [重复]

Posted

技术标签:

【中文标题】需要为 SQL Server 中另一个值重复的记录更新一列 [重复]【英文标题】:Need to update one column for records where another value is duplicative in SQL Server [duplicate] 【发布时间】:2015-11-30 21:35:15 【问题描述】:

我的 SQL 非常生疏,已经有几年了,但我需要编写一个查询来修复我拥有的表中的某些内容。

存在错误的重复项,并非每一列都相同,但我知道至少有一个。

所以我有这个有效的查询:

SELECT 
    [IntMsgID], [SortDate], COUNT(*)
FROM 
    [databasename].[dbo].[tblDoc]
GROUP BY
    [IntMsgID], [SortDate]
HAVING 
    COUNT(*) >= 2 
    AND [IntMsgID] IS NOT NULL

它识别有问题的文件。然后,我需要做的是从中获取结果,并简单地使用 Y 或 1 的值更新另一个字段。

我已经完成了搜索,似乎我尝试插入的任何查询都失败了,例如

UPDATE [databasename].[dbo].[tblDoc] AS t 
INNER JOIN 
    (SELECT [IntMsgID] msgid 
     FROM [databasename].[dbo].[tblDoc] 
     GROUP BY [IntMsgID]) t1 ON t.[IntMsgID] = t1.[IntMsgID]
SET [JG_SQLDupe] = 'Y'

我在“AS”、“INNER”和“t1”处遇到语法错误

【问题讨论】:

谢谢,我会看看那个帖子。我自己没有找到它 【参考方案1】:

我会使用 CTE 来实现:

;with updts as (SELECT [IntMsgID], [SortDate], count(*)
                FROM [databasename].[dbo].[tblDoc]
                Group By [IntMsgID], [SortDate]
                HAVING count(*) >= 2 AND [IntMsgID] is not null)
 update t
 set t.Flag = 'Y' 
 from [databasename].[dbo].[tblDoc] t inner join 
      updts u on t.[IntMsgID] = u.[IntMsgID] 
             and t.[SortDate] = u.[SortDate]

【讨论】:

对不起,我应该清楚的,要么只显示 Y 或 1,我没有理由需要两者都出现。所以我们只会说我只需要值 Y 显示在我的 JG_SQLDupe 字段中 查看更新... "set t.Flag = 'Y' " 是的,进行了一项更改并且它正在工作。非常感谢。此外,我必须为初始 SELECT 语句中的列提供别名,因为它在不这样做的情况下向我抛出了第一个“updts”值的错误 太棒了!如果有帮助,请随时接受它作为答案。

以上是关于需要为 SQL Server 中另一个值重复的记录更新一列 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server - 如何使部分重复的行从原始行继承值

用文档中另一个字段的值更新字段[重复]

如何用sql 语句查找一个表里的两个字段重复的记录

SQL Server 数据库查找重复记录的几种方法

SQL Server标识列重新编号[重复]

在 SQL Server 中处理 Null 值和重复记录