FROM 句を使用したデータの変更
1 つ以上のテーブルまたはビューから、更新するテーブルにデータを追加するには、FROM 句を使用します。次の例では、SalesPerson
テーブルの SalesYTD
列が変更され、SalesOrderHeader
テーブルに記録された最新の売上高が反映されます。
USE AdventureWorks;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + SubTotal
FROM Sales.SalesPerson AS sp
JOIN Sales.SalesOrderHeader AS so
ON sp.SalesPersonID = so.SalesPersonID
AND so.OrderDate = (SELECT MAX(OrderDate)
FROM Sales.SalesOrderHeader
WHERE SalesPersonID =
sp.SalesPersonID);
GO
上記の例は、指定した販売員による特定の日付の売上高が 1 つだけ記録され、最新状態に更新されることが前提になっています。指定した販売員の同じ日の売上高を複数記録できる場合、この例は正しく機能しません。この場合、エラーなしで実行されますが、実際に同じ日に記録された売り上げ件数に関係なく、それぞれの SalesYTD
値につき 1 件の売り上げしか更新されません。これは、1 つの UPDATE ステートメントで同じ行を 2 回更新できないためです。
同じ日に、指定した販売員の売り上げが複数記録されるような場合は、次の例のように、UPDATE
ステートメントの中で各販売員ごとにすべての売り上げを集計する必要があります。
USE AdventureWorks;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD +
(SELECT SUM(so.SubTotal)
FROM Sales.SalesOrderHeader AS so
WHERE so.OrderDate = (SELECT MAX(OrderDate)
FROM Sales.SalesOrderHeader AS so2
WHERE so2.SalesPersonID =
so.SalesPersonID)
AND Sales.SalesPerson.SalesPersonID = so.SalesPersonID
GROUP BY so.SalesPersonID);
GO
参照
概念
SET 句を使用したデータの変更
WHERE 句の使用によるデータの変更
TOP の使用による更新行数の制限
UPDATE の使用によるデータの変更