2014-04-09 50 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