2014-04-09 95 views
-1

當我運行這個SQL代碼,我收到以下錯誤消息導致SQL表:更新基於從子選擇

Msg 116, Level 16, State 1, Line 17 
Only one expression can be specified in the select list when the subquery 
is not introduced with EXISTS. 

我要的是一旦有事情從我的更新查詢返回其有與AgreementNo, ElementStartDate and DateSeqNo相同,它會使用+ 1的ElementStartDate更新其中一個重複記錄,這將刪除重複記錄。

Update [WASP_Mart_EmbassyActuarial].[dbo].[tblARM_OmegaSource] 
SET ElementStartDate = ElementStartDate + 1 
WHERE AgreementNo IN 
    (SELECT 
     count(*) as [Count], 
     [AgreementNo], 
     [ElementStartDate], 
     [DateSeqNo], 
     getdate() as Today 
    FROM [WASP_Mart_EmbassyActuarial].[dbo].[tblARM_OmegaSource] 
    GROUP BY 
     [AgreementNo], 
     [ElementStartDate], 
     [DateSeqNo] 
    HAVING COUNT(*) = 2) 
+0

但是,這不會創建新的重複?如果例如有兩個'AgreementNo1,ElementStartDate1,DateSeqNo1'的實例和'AgreementNo1,ElementStartDate2,DateSeqNo1'的一個實例,其中'ElementStartDate2 = ElementStartDate1 + 1',使用你的邏輯打破重複對將有效地產生一個'AgreementNo1,ElementStartDate1,DateSeqNo1 '和兩個'AgreementNo1,ElementStartDate2,DateSeqNo1'。 –

+0

嗨,安德烈,我可以看到你來自哪裏。然而,每條記錄只在每個月的同一天進來,因此通過增加'ElementStartDate'確保當天不會有另一條記錄+1。我知道這不是我最喜歡的選項試圖實現,但這只是需要另外3-6個月,所以我真的只是尋找一個快速修復。 – user3515329

回答

1

指定列數和更新這些行,其中的行數大於1:

​​

該方法可以處理一個組中有兩個以上重複的案例,althou嗯,當然,有很多重複它可能會開始生產新的。

+0

謝謝Andriy,完美的作品! – user3515329

1

Sub查詢返回多個列。您無法使用運算符來比較多個列。

試試下面的查詢:

Update [WASP_Mart_EmbassyActuarial].[dbo].[tblARM_OmegaSource] 
SET ElementStartDate = ElementStartDate + 1 
WHERE AgreementNo IN 
(SELECT [AgreementNo] 
    FROM [WASP_Mart_EmbassyActuarial].[dbo].[tblARM_OmegaSource] 
    GROUP BY [AgreementNo] -- OR [AgreementNo],[ElementStartDate],[DateSeqNo] 
    HAVING COUNT(*) = 2) 
+0

感謝您的快速回復。更新[WASP_Mart_EmbassyActuarial] [DBO]。[tblARM_OmegaSource] SET ElementStartDate = ElementStartDate + 1 WHERE AgreementNo IN (SELECT [AgreementNo] FROM [WASP_Mart_EmbassyActuarial] [DBO]。[tblARM_OmegaSource] GROUP BY [AgreementNo],[ ElementStartDate],[DateSeqNo] HAVING COUNT(*)= 2)然而,它更新了所有返回的行,而我只想更新那些具有相同AgreementNo和ElementStartDate和DateSeqNo並更新1然後刪除重複值的重複項。 – user3515329

0

也許試試這個:在AgreementNo, ElementStartDate, DateSeqNo分區

Update [WASP_Mart_EmbassyActuarial].[dbo].[tblARM_OmegaSource] 
SET ElementStartDate = ElementStartDate + 1 
WHERE AgreementNo IN 
(SELECT 
     AgreementNo 
    FROM [WASP_Mart_EmbassyActuarial].[dbo].[tblARM_OmegaSource] 
    GROUP BY 
     [AgreementNo], 
     [ElementStartDate], 
     [DateSeqNo] 
    HAVING COUNT(*) = 2) 
+0

感謝您的快速響應,它似乎與另一篇文章相同。這是extreamly關閉然而,它更新所有返回的行,而我只想要更新具有相同的AgreementNo,ElementStartDate和DateSeqNo並只更新1重複,然後將刪除該重複的值。 – user3515329