Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Câu lệnh SQL CASE

Câu lệnh SQL CASE rất mạnh mẽ và linh hoạt. Nó có thể được sử dụng trong câu lệnh SELECT, UPDATE và INSERT. Thậm chí nó có thể được sử dụng trong mệnh đề ORDER BY và GROUP BY. Hãy kiểm tra từng cái một.

Cú pháp

Trước tiên, hãy kiểm tra cú pháp của câu lệnh CASE:

CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2

...
WHEN conditionN THEN resultN
ELSE result
END;

Chuẩn bị dữ liệu

Đầu tiên, chọn cơ sở dữ liệu ưa thích của bạn và chạy các truy vấn bên dưới để tạo bảng “Người” và điền dữ liệu.

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

Tuyên bố CHỌN

Hãy sử dụng nó trong câu lệnh SELECT của chúng tôi.

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

Đầu ra

Tuyên bố CHÈN

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
)

Đầu ra

Nếu chúng ta chạy lại câu lệnh SELECT đầu tiên, thì kết quả đầu ra sẽ là:

Tuyên bố CẬP NHẬT

DECLARE @age INT
SET @age = -4

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

Đầu ra

Nếu chúng ta chạy lại câu lệnh SELECT ở trên, thì kết quả đầu ra sẽ là:

ĐẶT HÀNG THEO Mệnh đề

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

Đầu ra

Mệnh đề GROUP BY

Giờ là lúc khám phá mệnh đề CASE trong GROUP BY trong câu lệnh SELECT đầu tiên của chúng ta:

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

Đầu ra

Chúng tôi đã đề cập đến tất cả các trường hợp trong chủ đề CASE của ngày hôm nay.

Ở nhà! Giữ an toàn!

Nó được xuất bản lần đầu tiên trên blog của tôi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi máy chủ SQL 4104:Không thể liên kết số nhận dạng nhiều phần.

  2. Tôi có thể đặt một lược đồ mặc định cho trong một quy trình được lưu trữ không?

  3. Làm cách nào để tự động hóa tác vụ tạo tập lệnh trong SQL Server Management Studio 2008?

  4. Tối ưu hóa TempDB:Tránh tắc nghẽn và các vấn đề về hiệu suất

  5. Tạo mặt nạ dữ liệu động trong SQL Server cho người mới bắt đầu