SQL Server 2005でCASEステートメントを使いこなす:レコード更新の達人になるためのガイド
SQL Server 2005でCASEステートメントを使用してレコードを更新する
例:
テーブル:
CREATE TABLE dbo.Customers (
CustomerID int,
FirstName varchar(50),
LastName varchar(50),
Country varchar(50)
);
データ:
INSERT INTO dbo.Customers (CustomerID, FirstName, LastName, Country)
VALUES (1, 'John', 'Doe', 'USA'),
(2, 'Jane', 'Doe', 'Canada'),
(3, 'Mike', 'Smith', 'UK');
更新処理:
UPDATE dbo.Customers
SET Country = CASE
WHEN Country = 'USA' THEN 'United States'
WHEN Country = 'Canada' THEN 'Canada'
ELSE 'Other'
END;
結果:
CustomerID | FirstName | LastName | Country
----------|----------|----------|---------
1 | John | Doe | United States
2 | Jane | Doe | Canada
3 | Mike | Smith | Other
解説:
UPDATE
ステートメントは、dbo.Customers
テーブルのレコードを更新します。CASE
ステートメントは、Country
列の値に基づいて異なる値を返します。WHEN
子句は、条件と返される値を指定します。ELSE
子句は、いずれのWHEN
子句にも一致しない場合に返される値を指定します。
- 特定の条件を満たすレコードのみを更新する
UPDATE dbo.Customers
SET Country = 'Other'
WHERE Country IN ('USA', 'Canada');
- 計算結果でレコードを更新する
UPDATE dbo.Customers
SET Discount = CASE
WHEN Country = 'USA' THEN 0.1
WHEN Country = 'Canada' THEN 0.2
ELSE 0.3
END;
UPDATE dbo.Customers
SET Country = CASE
WHEN Country = 'USA' THEN 'United States'
WHEN Country = 'Canada' THEN 'Canada'
ELSE 'Other'
END;
例2:Country 列が "USA" または "Canada" のレコードにのみ割引を適用する
UPDATE dbo.Customers
SET Discount = CASE
WHEN Country IN ('USA', 'Canada') THEN 0.1
ELSE 0
END;
例3:Age 列の値に基づいて顧客を分類する
UPDATE dbo.Customers
SET CustomerType = CASE
WHEN Age < 18 THEN 'Child'
WHEN Age BETWEEN 18 AND 65 THEN 'Adult'
ELSE 'Senior'
END;
例4:Sales 列の値に基づいて顧客ステータスを更新する
UPDATE dbo.Customers
SET Status = CASE
WHEN Sales > 1000 THEN 'Gold'
WHEN Sales > 500 THEN 'Silver'
ELSE 'Bronze'
END;
これらのサンプルコードは、CASEステートメントを使用してレコードを更新する方法を示しています。 さまざまな条件に基づいて複雑な更新処理を行うことができます。
ヒント:
- CASEステートメントは、条件に応じて異なる値を返す便利な機能です。
CASE ステートメントの代わりに使用できる他の方法
IF ステートメント:
DECLARE @Country varchar(50)
SET @Country = 'USA'
IF @Country = 'USA'
BEGIN
UPDATE dbo.Customers
SET Country = 'United States'
WHERE Country = 'USA';
END
ELSE IF @Country = 'Canada'
BEGIN
UPDATE dbo.Customers
SET Country = 'Canada'
WHERE Country = 'Canada';
END
ELSE
BEGIN
UPDATE dbo.Customers
SET Country = 'Other'
WHERE Country IN ('USA', 'Canada');
END
UPDATE ステートメントの WHERE 句:
UPDATE dbo.Customers
SET Country = 'United States'
WHERE Country = 'USA';
UPDATE dbo.Customers
SET Country = 'Canada'
WHERE Country = 'Canada';
UPDATE dbo.Customers
SET Country = 'Other'
WHERE Country IN ('USA', 'Canada');
MERGE dbo.Customers AS Target
USING (
SELECT CustomerID,
CASE
WHEN Country = 'USA' THEN 'United States'
WHEN Country = 'Canada' THEN 'Canada'
ELSE 'Other'
END AS Country
FROM dbo.Customers
) AS Source
ON Target.CustomerID = Source.CustomerID
WHEN MATCHED THEN
UPDATE SET Target.Country = Source.Country;
これらの方法は、CASE ステートメントよりも冗長になる場合がありますが、CASE ステートメントよりも分かりやすい場合があります。
どの方法を使用するかは、状況によって異なります。 以下の点を考慮する必要があります。
- 処理の複雑さ
- 読みやすさ
- パフォーマンス
sql sql-server t-sql