2015-09-04 58 views
0

我非常生鏽,我的SQL已經過了幾年,但我需要編寫一個查詢來修復某個表中的內容。需要在SQL Server中更新其中一個值是重複記錄的列

有錯誤的重複,不是每列都是一樣的,但我知道至少有一個是。

所以我有這個疑問的作品:

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」 和 「內部」 和 「T1」

+0

謝謝,我會看通過該線程。我沒有在自己的搜索中找到它 –

回答

0

得到語法錯誤,我會用一個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] 
+0

對不起,我應該已經清楚,無論是隻是Y還是1,沒有理由我需要兩個都出現。所以我們只是說我只需要在我的JG_SQLDupe字段中顯示的值Y –

+0

請參閱更新...「set t.Flag ='Y'」 – rwking

+1

是的,這是一個改變,它正在工作。非常感謝。此外,我不得不給第一個SELECT語句中的列提供別名,因爲它在第一次「updts」時拋出了錯誤,而沒有這樣做。 –

相關問題