2011-08-17 16 views
0

サブクエリに基づいて更新クエリを実行するにはどうすればよいですか?
サブクエリのこれらの列をすべて、更新文の列とどのように比較できますか?
これを行うためのきちんとした、きれいな方法がありますか?sql server queryサブクエリで複数の列を比較する方法

私はそれをしようとしているクエリを以下に示します。

UPDATE Temp_CropData 
SET RecordStatus = 0, 
    Remarks = ISNULL(Remarks, '') +' Duplicate Records' 
WHERE 
    (SELECT Commodity ,City,Period,CropCondition 
     FROM [Temp_CropData] 
     GROUP BY DDate,Commodity,City,Period,CropCondition 
     HAVING count(*) >1) 

答えて

1

これを試してみてください:

UPDATE cd 
SET RecordStatus = 0,  
    Remarks = ISNULL(Remarks, '') +' Duplicate Records' 
FROM Temp_CropData cd 
JOIN (SELECT Commodity ,City,Period,CropCondition  
FROM [Temp_CropData]   
GROUP BY DDate,Commodity,City,Period,CropCondition   
HAVING count(*) >1) dup 
    ON cd.DDate = dup.DDate AND cd.Commodity=dup.Commodity AND cd.City = dup.City 
    AND cd.Period = dup.Period AND cd.CropCondition = dup.CropCondition 
3

MERGEを使用してみてください:

MERGE INTO Temp_CropData 
    USING (
      SELECT Commodity, City, Period, CropCondition 
      FROM Temp_CropData 
      GROUP 
       BY DDate, Commodity, City, Period, CropCondition 
      HAVING COUNT(*) > 1 
     ) AS source 
     ON Temp_CropData.Commodity = source.Commodity 
     AND Temp_CropData.City = source.City 
     AND Temp_CropData.Period = source.Period 
     AND Temp_CropData.CropCondition = source.CropCondition 
WHEN MATCHED THEN 
    UPDATE 
     SET RecordStatus = 0, 
      Remarks = ISNULL(Remarks, '') + ' Duplicate Records'; 

私はあなたのサブクエリのSELECTGROUP BY句がないという事実を少し不審なよ一致します(つまり、DDateGROUP BYにありますが、SELECTには含まれません)。

関連する問題