단일 업데이트로이를 수행 할 수 있습니다.
UPDATE SalesSummary
SET FamilySales = SalesSummary.FamilySales + (case when bx.Family = p.Family then p.FamilySale else 0 end),
CityTotal = SalesSummary.FamilyTotal + p.FamilyTotal
FROM DailySalesSummary p,
Reference bx
WHERE SalesSummary.Person = bx.Person
AND bx.City = p.City
AND SalesSummary.Year = p.Year;
이는 조건 FamilySales
과 일치하지 않는 행에서 자체적으로 설정 됩니다 bx.Family = p.Family
. 그러나 두 쿼리와 동일한 효과가 있어야합니다.
편집하다:
다음은 보유한 데이터에서 작동하는 것 같습니다.
UPDATE ss
set FamilySales = ss.FamilySales + dss.FamilySales,
CitySales = ss.CitySales + dss.CitySales
FROM SalesSummary ss join
DailySalesSummary dss
on ss.Person = dss.Person and
ss.City = dss.City
ss.Family = dss.Family;
bx
테이블에 조인이있는 이유를 이해할 수 없습니다 . 걸러 내고 싶다면 여전히 할 수 있습니다.
내가 알 수있는 한,의 데이터는 DailySalesSummary
업데이트해야하는 항목과 일치하므로 간단한 join
것은 올바른 행을 함께 가져옵니다.
실제로 UPDATE
하나의 UPDATE
문으로 테이블을 두 개 이상 사용할 수 없습니다 . 자세한 내용은 이 Stack Overflow 답변 에서 찾을 수 있습니다 .
업데이트중인 모든 열이 동일한 테이블에 있고 동일한 소스 테이블에서 가져온 경우 다음과 같이 간단히 여러 열을 업데이트 할 수 있습니다.
UPDATE SalesSummary
SET FamilySales = SalesSummary.FamilySales + p.FamilySales,
CityTotal = SalesSummary.FamilyTotal + p.FamilyTotal
FROM DailySalesSummary p,
Reference bx
WHERE SalesSummary.Person= bx.Person
AND bx.City = p.City
AND bx.Family = p.Family
AND SalesSummary.Year = p.Year
SQL 2000
-스타일 조인 은 권장하지 않지만 . 재 작업은 다음과 같습니다.
UPDATE SalesSummary
SET FamilySales = SalesSummary.FamilySales + p.FamilySales,
CityTotal = SalesSummary.FamilyTotal + p.FamilyTotal
FROM
DailySalesSummary p
JOIN Reference bx ON bx.City = p.City
AND bx.Family = p.Family
WHERE
SalesSummary.Year = p.Year
AND SalesSummary.Person = bx.Person
업데이트 된 답변
UPDATE s
SET
s.FamilySales = s.FamilySales + fam.FamilySales,
s.CitySales = s.CitySales + city.CitySales
FROM
SalesSummary s
JOIN Reference r ON r.Person = s.Person
JOIN (SELECT DISTINCT Year, Family, FamilySales FROM DailySalesSummary) fam ON fam.Family = r.Family AND fam.Year = s.Year
JOIN (SELECT DISTINCT Year, City, CitySales FROM DailySalesSummary) city ON city.City = r.City AND city.Year = s.Year
여기 SQLFiddle에서 작업 예제를 볼 수 있습니다 .
출처
https://stackoverflow.com/questions/22049921