سلام دوستان.من این نکته رو در جایی دیدم گفتم شاید بد نباشه اگه کسی به مشکلی برخورد ببینه و استفاده کنه. شما بعضی مواقع که نیاز دارید یک جدولی رو update کنید و میخواهید بعضی از فیلدها بروز شوند خوب یک شرط در جلوی دستور Set قرار میدهید و اینکارو انجام میدید.
ولی فرض کنید نیاز دارید مثلا جمع تعداد فیلدهای یک جدول رو براساس کد کالا داشته باشید.
مثلا در جدول ریز فاکتور فروش.یک کالا ممکنه چند بار تعریف شده باشه و مقادیر مختلف داشته باشه و چند کالای دیگر هم تعریف شده باشه.خوب وقتی شخص این فاکتور رو حذف میکنه تعداد این کالاها باید به انبار اضافه بشه.در حالت عادی شما نمیتونی اینکارو انجام بدی.چون کالایی که چند بار تکرار شده اگر با یک شرط ساده انجام بدی(کاری که من قبلا کردم) فقط موجودی اولین کالا رو از انبار کم میکنه. ولی با group by شما میتونی جمع تعداد کالاهای تکراری رو بدست بیاری و در انبار بروز کنی.خوب شما در حالت عادی نمیتوانید از group by در update استفاده کنید. یا مجبورید یک جدول temp ایجاد کنید و این مقادیر رو داخل اون قرار بدید و سپس جدول اصلی رو بروز کنید. یا میتونید بوسیله Dervied Table ها اینکارو انجام بدید.
من نمونه کدی براتون میذارم که در جدول northwind به کار رفته و قیمت 5 کالای اول رو 20% افزایش میده.

UPDATE P
SET
P.UnitPrice = P.UnitPrice * 1.2
FROM
Products AS p
JOIN
(
SELECT TOP 5
ProductID,
SUM (Quantity) AS Quantity
FROM
[Order Details]
GROUP BY
ProductID
ORDER BY
Quantity DESC
) AS S ON S.ProductID = P.ProductID

امیدوارم که به دردتون بخوره.
موفق باشید.