需要为 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 中另一个值重复的记录更新一列 [重复]的主要内容,如果未能解决你的问题,请参考以下文章