SQL Server 2005でCASEステートメントを使いこなす:レコード更新の達人になるためのガイド

2024-04-02

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


初心者でも安心! SQL Server データベースの TRUSTWORTHY プロパティを 3 分で理解する

T-SQL を使用して、TRUSTWORTHY プロパティがオンまたはオフに設定されているかどうかを確認するには、以下の方法があります。sp_dboption プロシージャを使用するこのコマンドは、指定されたデータベース (dbname) の TRUSTWORTHY プロパティの現在の設定値を返します。...


たった数行のSQLでOK!Oracle SQLでスキーマを丸裸にする方法

方法 1: USER_TABLES ビューを使用する解説:USER_TABLES ビューは、現在のユーザーが所有するすべての表に関する情報を格納しています。このビューを使用すると、スキーマ名、表名、列名、データ型など、各表に関する詳細情報を取得できます。...


データベースをクリーンに保つ!sqliteで古いレコードを削除する方法と注意点

基本的な構文例:このクエリは、商品情報 テーブルから 登録日 が 2024-06-17 より古いすべてのレコードを削除します。古いレコードを特定するための条件WHERE 句には、削除するレコードを特定するための条件を指定できます。 以下に、よく使用される条件の例を示します。...


データベース運用の効率化に貢献!MySQL連続番号のギャップを見つけるツールとプラグイン

本記事では、MySQLで連続番号のギャップを見つける方法について、いくつかの方法を紹介していきます。最もシンプルな方法として、MAX()とMIN()関数を使用して、連続番号の最大値と最小値を取得し、その差分を計算する方法があります。このクエリは、your_tableテーブル内のnumber列において、最大値と最小値の差分を計算し、gapsという変数に格納します。差分が0であればギャップは存在せず、0より大きい場合はギャップが存在することを示します。...


SQLステートメントのパラメータ使用:インジェクション対策を超えた、開発の効率化と保守性の向上

SQLインジェクションは、悪意のあるユーザーが不正なSQL文を意図的に挿入することで、データベースを不正操作する脆弱性です。具体的には、以下の様な被害が発生します。データの窃取・改ざん・削除:顧客情報や機密情報などの閲覧・漏洩ログイン情報の改ざんによる不正アクセス重要データの削除や改ざんによる業務停止...