SQL Server запрос, как иметь несколько столбцов сравнения с подзапросом - PullRequest
0 голосов
/ 17 августа 2011

Как сделать так, чтобы запрос на обновление работал на основе подзапроса?
Как сравнить все эти столбцы в подзапросе со столбцами в операторе обновления?
Есть какой-нибудь аккуратный и чистый способ сделать это?

Запрос, который я пытаюсь выполнить, показан ниже:

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) 

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

Попробуйте использовать 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';

Я немного подозрительно отношусь к тому факту, что предложения SELECT и GROUP BY вашего подзапроса не совпадают (т.е.DDate находится в GROUP BY, но не SELECT).

1 голос
/ 17 августа 2011

Попробуйте это:

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...