sql >> データベース >  >> RDS >> Sqlserver

SQLCASEステートメント

    SQL CASEステートメントは、非常に強力で用途が広いです。 SELECT、UPDATE、およびINSERTステートメントで使用できます。 ORDERBYおよびGROUPBY句で使用することもできます。それらを1つずつ調べてみましょう。

    構文

    まず、CASEステートメントの構文を確認してください:

    CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    
    ...
    WHEN conditionN THEN resultN
    ELSE result
    END;
    

    データの準備

    まず、好みのデータベースを選択し、以下のクエリを実行して、テーブル「Persons」を作成し、データを入力します。

    IF OBJECT_ID('Persons', 'U') IS NOT NULL
    DROP TABLE Persons;
    GO
    
    CREATE TABLE Persons(
    name varchar(20)
    ,age int
    ,sex varchar(2)
    )
    
    GO
    
    INSERT INTO Persons (name,age,sex) values('Bob',5, 'M');
    INSERT INTO Persons (name,age,sex) values('Harry',15, 'M');
    INSERT INTO Persons (name,age,sex) values('Jasmine',25, 'F');
    INSERT INTO Persons (name,age,sex) values('Fanny',65, 'F');
    INSERT INTO Persons (name,age,sex) values('Evan',-1, 'N');
    
    GO

    SELECTステートメント

    SELECTステートメントで使用しましょう。

    SELECT Name, age as 'Actual Age',
    CASE
    WHEN age >= 0 AND age <= 12 THEN 'CHILD'
    WHEN age >= 13 AND age <= 19 THEN 'TEEN AGE'
    WHEN age >= 20 AND age <= 40 THEN 'YOUNG'
    WHEN age >= 41 AND age <= 60 THEN 'MIDDLE AGE'
    WHEN age >= 61 THEN 'OLD'
    ELSE 'NOT DEFINED' END as 'New Age using CASE Stmt',
    sex as 'Actual Gender',
    CASE
    WHEN sex = 'M' THEN 'MALE'
    WHEN sex = 'F' THEN 'FEMALE'
    WHEN sex = 'N' THEN 'DONT WANT TO DISCLOSE'
    END as  'New Gender  using CASE Stmt'
    FROM Persons

    出力

    INSERTステートメント

    DECLARE @age INT
    DECLARE @sex VARCHAR(10)
    
    SET @age = 40
    SET @sex = 'MALE'
    INSERT INTO Persons (Name, Age, Sex)
    VALUES(
    'Jack',
    CASE WHEN @age < 0 THEN -1 ELSE @age END,
    CASE WHEN @sex = 'MALE' THEN 'M'
    WHEN @sex = 'FEMALE' THEN 'F'
    ELSE 'N' END
    )

    出力

    最初のSELECTステートメントを再度実行すると、出力は次のようになります。

    UPDATEステートメント

    DECLARE @age INT
    SET @age = -4
    
    UPDATE Persons SET
    age = CASE WHEN @age < 0 THEN -1 ELSE @age END
    WHERE Name = 'Bob'

    出力

    上記のSELECTステートメントを再度実行すると、出力は次のようになります。

    ORDERBY句

    CASE can be added in ORDER BY clause in above SELECT statement
    SELECT Name, age as 'Actual Age',
    CASE
    WHEN age >= 0 AND age <= 12 THEN 'CHILD'
    WHEN age >= 13 AND age <= 19 THEN 'TEEN AGE'
    WHEN age >= 20 AND age <= 40 THEN 'YOUNG'
    WHEN age >= 41 AND age <= 60 THEN 'MIDDLE AGE'
    WHEN age >= 61 THEN 'OLD'
    ELSE 'NOT DEFINED' END as 'New Age using CASE Stmt',
    sex as 'Actual Gender',
    CASE
    WHEN sex = 'M' THEN 'MALE'
    WHEN sex = 'F' THEN 'FEMALE'
    WHEN sex = 'N' THEN 'DONT WANT TO DISCLOSE'
    END as  'New Gender  using CASE Stmt'
    FROM Persons
    ORDER BY
    CASE WHEN sex='M' THEN age END,
    CASE WHEN sex='F' THEN Name END

    出力

    GROUPBY句

    次に、最初のSELECTステートメントのGROUPBY句でCASEを調べます。

    SELECT
    CASE
    WHEN age <= 40 THEN 'YOUNG'
    WHEN age >= 41 THEN 'OLD'
    END as 'New Age using CASE Stmt', COUNT(*)
    FROM Persons
    GROUP BY CASE
    WHEN age <= 40 THEN 'YOUNG'
    WHEN age >= 41 THEN 'OLD'
    END

    出力

    今日のCASEトピックのすべてのケースをカバーしました。

    家にいる!安全を確保してください!

    それは私のブログで最初に公開されました。


    1. 空のSQLiteデータベースを作成する方法

    2. GoogleDatastudioを使用したHerokuPostgresql

    3. MSSQLServerでの長時間実行クエリのトラブルシューティング

    4. SQLキャスト日時