Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изявление на SQL CASE

SQL CASE изразът е много мощен и гъвкав. Може да се използва в изрази SELECT, UPDATE и INSERT. Дори може да се използва в клауза ORDER BY и GROUP BY. Нека ги разгледаме един по един.

Синтаксис

Първо проверете синтаксиса на израза CASE:

CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2

...
WHEN conditionN THEN resultN
ELSE result
END;

Подготовка на данни

Първо изберете предпочитаната от вас база данни и изпълнете по-долу заявки за създаване на таблица „Лицата“ и попълване с данни.

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, тогава изходът ще бъде:

Изявление за актуализация

DECLARE @age INT
SET @age = -4

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

Изход

Ако изпълним отново горния оператор SELECT, тогава изходът ще бъде:

Клауза ORDER BY

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

Изход

Клауза GROUP BY

Сега е време да проучим CASE в клаузата GROUP BY в първия ни оператор 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

Изход

Обхванахме всички случаи на днешната ни тема CASE.

Остани у дома! Бъдете в безопасност!

За първи път беше публикуван в моя блог.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. няма sqljdbc_auth в java.library.path

  2. Въведение в Storage Spaces Direct за SQL Server

  3. 2 начина за връщане на списък със свързани сървъри в SQL Server с помощта на T-SQL

  4. Измерване на ефективността на заявката:Разходи за заявка на план за изпълнение спрямо отнето време

  5. Как да проверите дали изчислената колона е „постоянна“ в SQL Server