Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Instrukcja SQL CASE

Instrukcja SQL CASE jest bardzo potężna i wszechstronna. Może być używany w instrukcjach SELECT, UPDATE i INSERT. Nawet może być użyty w klauzulach ORDER BY i GROUP BY. Zbadajmy je jeden po drugim.

Składnia

Najpierw sprawdź składnię instrukcji CASE:

CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2

...
WHEN conditionN THEN resultN
ELSE result
END;

Przygotowywanie danych

Najpierw wybierz preferowaną bazę danych i uruchom poniższe zapytania, aby utworzyć tabelę „Osoby” i wypełnić danymi.

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

Oświadczenie SELECT

Użyjmy go w naszej instrukcji 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

Wyjście

INSERT oświadczenie

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
)

Wyjście

Jeśli ponownie uruchomimy naszą pierwszą instrukcję SELECT, wynik będzie następujący:

Oświadczenie UPDATE

DECLARE @age INT
SET @age = -4

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

Wyjście

Jeśli ponownie uruchomimy powyższą instrukcję SELECT, wynik będzie następujący:

Klauzula ZAMÓW WEDŁUG

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

Wyjście

Klauzula GRUPUJ WEDŁUG

Teraz czas na zbadanie CASE w klauzuli GROUP BY w naszej pierwszej instrukcji SELECT:

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

Wyjście

Omówiliśmy wszystkie przypadki naszego dzisiejszego tematu CASE.

Zostań w domu! Bądź bezpieczny!

Po raz pierwszy została opublikowana na moim blogu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj IDENT_CURRENT(), aby zwrócić bieżącą wartość tożsamości w kolumnie tożsamości w SQL Server

  2. Jak przekonwertować puste spacje na wartości null za pomocą SQL Server?

  3. Jak naprawić błąd „Dostawca nazwanych potoków, błąd 40 — nie można otworzyć połączenia z serwerem SQL Server”?

  4. Wyodrębnij numer tygodnia z daty w SQL Server (T-SQL)

  5. Jak zdobyć skrypt danych SQL Server?