Tham chiếu Transact-SQL cho biểu thức CASE. CASE đánh giá danh sách các điều kiện để trả về kết quả cụ thể.

Bạn đang xem : Câu lệnh chuyển đổi ms sql

CASE (Transact-SQL)

Trong bài viết này

Áp dụng cho: SQL Server (tất cả các phiên bản được hỗ trợ) Cơ sở dữ liệu Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Hệ thống phân tích nền tảng (PDW)

Đánh giá danh sách các điều kiện và trả về một trong nhiều biểu thức kết quả có thể có.

Biểu thức CASE có hai định dạng:

  • Biểu thức CASE đơn giản so sánh một biểu thức với một tập hợp các biểu thức đơn giản để xác định kết quả.

  • Biểu thức CASE được tìm kiếm đánh giá một tập hợp các biểu thức Boolean để xác định kết quả.

Cả hai định dạng đều hỗ trợ đối số ELSE tùy chọn.

CASE có thể được sử dụng trong bất kỳ câu lệnh hoặc mệnh đề nào cho phép biểu thức hợp lệ. Ví dụ: bạn có thể sử dụng CASE trong các câu lệnh như SELECT, UPDATE, DELETE và SET, và trong các mệnh đề như select_list, IN, WHERE, ORDER BY và HAVING.

Quy ước về cú pháp Transact-SQL

Cú pháp

  - Cú pháp cho SQL Server, Azure SQL Database và Azure Synapse Analytics
  
- Biểu thức CASE đơn giản:
CASE input_expression
     WHEN when_expression THEN result_expression [... n]
     [ELSE else_result_expression]
CHẤM DỨT

- Biểu thức CASE đã tìm kiếm:
TRƯỜNG HỢP
     KHI Boolean_expression THEN result_expression [... n]
     [ELSE else_result_expression]
CHẤM DỨT
 
  - Cú pháp cho Kho Dữ liệu Song song
  
TRƯỜNG HỢP
     WHEN when_expression THEN result_expression [... n]
     [ELSE else_result_expression]
CHẤM DỨT
 

Lưu ý

Để xem cú pháp Transact-SQL cho SQL Server 2014 trở về trước, hãy xem Tài liệu về các phiên bản trước .

Đối số

input_expression
Biểu thức được đánh giá khi định dạng CASE đơn giản được sử dụng. input_expression là bất kỳ biểu thức hợp lệ nào.

WHEN when_expression
Là một biểu thức đơn giản mà input_expression được so sánh khi định dạng CASE đơn giản được sử dụng. when_expression là bất kỳ biểu thức hợp lệ nào. Các loại dữ liệu của input_expression và mỗi when_expression phải giống nhau hoặc phải là một chuyển đổi ngầm định.

THEN result_expression
Là biểu thức được trả về khi input_expression bằng khi_expression được đánh giá là TRUE hoặc Boolean_expression được đánh giá là TRUE. biểu thức kết quả là bất kỳ biểu thức hợp lệ nào.

ELSE else_result_expression
Biểu thức được trả về nếu không có thao tác so sánh nào đánh giá là TRUE. Nếu đối số này bị bỏ qua và không có thao tác so sánh nào đánh giá là TRUE, CASE trả về giá trị NULL. else_result_expression là bất kỳ biểu thức hợp lệ nào. Các loại dữ liệu của else_result_expression và bất kỳ biểu thức result_expression nào phải giống nhau hoặc phải là một chuyển đổi ngầm định.

KHI Boolean_expression
Biểu thức Boolean có được đánh giá khi sử dụng định dạng CASE được tìm kiếm không. Boolean_expression là bất kỳ biểu thức Boolean hợp lệ nào.

Lưu ý

Để xem cú pháp Transact-SQL cho SQL Server 2014 trở về trước, hãy xem Tài liệu về các phiên bản trước .

Loại trả lại

Trả về kiểu ưu tiên cao nhất từ ​​tập hợp các kiểu trong result_expressions và else_result_expression tùy chọn. Để biết thêm thông tin, hãy xem Thứ tự loại dữ liệu (Giao dịch-SQL) .

Giá trị Trả lại

Biểu thức CASE đơn giản:

Biểu thức CASE đơn giản hoạt động bằng cách so sánh biểu thức đầu tiên với biểu thức trong mỗi mệnh đề WHEN về tính tương đương. Nếu các biểu thức này tương đương, biểu thức trong mệnh đề THEN sẽ được trả về.

  • Chỉ cho phép kiểm tra tính bình đẳng.

  • Theo thứ tự được chỉ định, đánh giá input_expression = when_expression cho mỗi mệnh đề WHEN.

  • Trả về biểu thức kết quả của input_expression đầu tiên = khi_expression đánh giá là TRUE.

  • Nếu không có input_expression = when_expression đánh giá là TRUE, thì SQL Server Database Engine trả về else_result_expression nếu mệnh đề ELSE được chỉ định hoặc giá trị NULL nếu không có mệnh đề ELSE nào được chỉ định.

Xem Thêm  Các chức năng tích hợp trong JavaScript - danh sách các hàm javascript

Biểu thức CASE đã tìm kiếm:

  • Đánh giá, theo thứ tự được chỉ định, Boolean_expression cho mỗi mệnh đề WHEN.

  • Trả về biểu thức result_expression của biểu thức Boolean_expression đầu tiên được đánh giá là TRUE.

  • Nếu không có biểu thức Boolean_expression nào đánh giá là TRUE, thì Công cụ cơ sở dữ liệu trả về biểu thức else_result_expression nếu mệnh đề ELSE được chỉ định hoặc giá trị NULL nếu không có mệnh đề ELSE nào được chỉ định.

Nhận xét

SQL Server chỉ cho phép 10 cấp độ lồng trong biểu thức CASE.

Không thể sử dụng biểu thức CASE để kiểm soát luồng thực thi các câu lệnh Transact-SQL, các khối câu lệnh, các hàm do người dùng định nghĩa và các thủ tục được lưu trữ. Để biết danh sách các phương thức kiểm soát luồng, hãy xem Ngôn ngữ kiểm soát luồng (Transact-SQL) .

Biểu thức CASE đánh giá các điều kiện của nó một cách tuần tự và dừng với điều kiện đầu tiên có điều kiện được thỏa mãn. Trong một số tình huống, một biểu thức được đánh giá trước khi một biểu thức CASE nhận kết quả của biểu thức làm đầu vào của nó. Có thể có sai sót khi đánh giá các biểu thức này. Các biểu thức tổng hợp xuất hiện trong các đối số WHEN của một biểu thức CASE được đánh giá đầu tiên, sau đó được cung cấp cho biểu thức CASE. Ví dụ: truy vấn sau đây tạo ra lỗi chia cho 0 khi tạo ra giá trị của tổng hợp MAX. Điều này xảy ra trước khi đánh giá biểu thức CASE.

  VỚI Dữ liệu (giá trị) NHƯ
(
CHỌN 0
ĐOÀN KẾT TẤT CẢ
CHỌN 1
)
LỰA CHỌN
   TRƯỜNG HỢP
      KHI MIN (giá trị) & lt; = 0 THÌ 0
      KHI TỐI ĐA (1 / value) & gt; = 100 THEN 1
   CHẤM DỨT
TỪ Dữ liệu;
 

Bạn chỉ nên phụ thuộc vào thứ tự đánh giá các điều kiện WHEN đối với biểu thức vô hướng (bao gồm các truy vấn phụ không tương quan trả về đại lượng vô hướng), chứ không phải đối với biểu thức tổng hợp.

Ví dụ

A. Sử dụng câu lệnh SELECT với biểu thức CASE đơn giản

Trong câu lệnh SELECT , một biểu thức CASE đơn giản chỉ cho phép kiểm tra tính bình đẳng; không có so sánh nào khác được thực hiện. Ví dụ sau sử dụng biểu thức CASE để thay đổi cách hiển thị của các danh mục dòng sản phẩm để làm cho chúng dễ hiểu hơn.

  SỬ DỤNG AdventureWorks2012;
ĐI
SELECT ProductNumber, Category =
      CASE ProductLine
         KHI 'R' THEN 'Đường'
         KHI 'M' THEN 'Núi'
         KHI 'T' THÌ 'Đi lưu diễn'
         KHI NÀO 'S' THÌ 'Các mặt hàng giảm giá khác'
         ELSE 'Không bán'
      CHẤM DỨT,
   Tên
TỪ SẢN XUẤT.
ĐẶT HÀNG THEO SỐ Sản phẩm;
ĐI
 

B. Sử dụng câu lệnh SELECT với biểu thức CASE đã tìm kiếm

Trong câu lệnh SELECT , biểu thức CASE được tìm kiếm cho phép các giá trị được thay thế trong tập kết quả dựa trên các giá trị so sánh. Ví dụ sau đây hiển thị giá niêm yết dưới dạng nhận xét văn bản dựa trên phạm vi giá của một sản phẩm.

  SỬ DỤNG AdventureWorks2012;
ĐI
CHỌN Số Sản phẩm, Tên, "Phạm vi Giá" =
      TRƯỜNG HỢP
         KHI ListPrice = 0 THÌ 'Mfg item - không bán lại'
         KHI Danh sách Giá & lt; 50 THÌ 'Dưới $ 50'
         KHI ListPrice & gt; = 50 và ListPrice & lt; 250 THÌ 'Dưới $ 250'
         KHI ListPrice & gt; = 250 và ListPrice & lt; 1000 THÌ 'Dưới $ 1000'
         ELSE 'Hơn $ 1000'
      CHẤM DỨT
TỪ SẢN XUẤT.
ĐẶT HÀNG THEO SỐ Sản phẩm;
ĐI
 

C. Sử dụng CASE trong mệnh đề ORDER BY

Các ví dụ sau sử dụng biểu thức CASE trong mệnh đề ORDER BY để xác định thứ tự sắp xếp của các hàng dựa trên giá trị cột nhất định. Trong ví dụ đầu tiên, giá trị trong cột SalariedFlag của bảng HumanResources.E Employee được đánh giá. Những nhân viên có SalariedFlag được đặt thành 1 sẽ được trả về theo thứ tự bởi BusinessEntityID theo thứ tự giảm dần. Những nhân viên có SalariedFlag được đặt thành 0 được trả về theo thứ tự bởi BusinessEntityID theo thứ tự tăng dần. Trong ví dụ thứ hai, tập hợp kết quả được sắp xếp theo cột TerritoryName khi cột CountryRegionName bằng ‘United States’ và theo CountryRegionName cho tất cả các hàng khác.

  CHỌN BusinessEntityID, SalariedFlag
TỪ Nguồn nhân lực. Nhân viên
ĐẶT HÀNG THEO TRƯỜNG HỢP Được tính lương
        , TRƯỜNG HỢP KHI SalariedFlag = 0 THÌ BusinessEntityID KẾT THÚC;
ĐI
 
  CHỌN BusinessEntityID, LastName, TerritoryName, CountryRegionName
TỪ Sales.vSalesPerson
NƠI Lãnh thổ Tên KHÔNG ĐẦY ĐỦ
ĐẶT HÀNG THEO TRƯỜNG HỢP Quốc gia Tên miền KHI 'Hoa Kỳ' THÌ Lãnh thổ Tên
         ELSE CountryRegionName END;
 

Ví dụ sau sử dụng biểu thức CASE trong câu lệnh CẬP NHẬT để xác định giá trị được đặt cho cột Giờ nghỉ cho nhân viên có SalariedFlag được đặt thành 0. Khi trừ đi 10 giờ kể từ VacationHours dẫn đến giá trị âm, VacationHours tăng thêm 40 giờ; nếu không, VacationHours được tăng thêm 20 giờ. Mệnh đề OUTPUT được sử dụng để hiển thị các giá trị trước và sau kỳ nghỉ.

  SỬ DỤNG AdventureWorks2012;
ĐI
CẬP NHẬT Nguồn nhân lực. Người lao động
SET VacationHours =
    ( TRƯỜNG HỢP
         KHI nào ((Giờ đi nghỉ - 10.00) & lt; 0) THÌ Số giờ đi nghỉ + 40
         ELSE (Giờ đi nghỉ + 20.00)
       CHẤM DỨT
    )
OUTPUT Đã xóa.BusinessEntityID, Đã xóa.VacationHours AS BeforeValue,
       Inserted.VacationHours AS AfterValue
WHERE SalariedFlag = 0;
 

E. Sử dụng CASE trong câu lệnh SET

Ví dụ sau sử dụng biểu thức CASE trong câu lệnh SET trong hàm giá trị bảng dbo.GetContactInfo . Trong cơ sở dữ liệu AdventureWorks2012 , tất cả dữ liệu liên quan đến con người được lưu trữ trong bảng Person.Person . Ví dụ: người đó có thể là nhân viên, đại diện nhà cung cấp hoặc khách hàng. Hàm trả về họ và tên của BusinessEntityID nhất định và loại liên hệ cho người đó. Biểu thức CASE trong câu lệnh SET xác định giá trị hiển thị cho cột ContactType dựa trên sự tồn tại của cột BusinessEntityID trong bảng Nhân viên , Nhà cung cấp hoặc Khách hàng .

  SỬ DỤNG AdventureWorks2012;
ĐI
TẠO CHỨC NĂNG dbo.GetContactInformation (@BusinessEntityID INT)
    RETURNS @retContactInformation BẢNG
(
BusinessEntityID INT NOT NULL,
FirstName NVARCHAR (50) NULL,
LastName NVARCHAR (50) NULL,
ContactType NVARCHAR (50) NULL,
    KHÓA CHÍNH ĐÃ ĐIỀU CHỈNH (BusinessEntityID ASC)
)
BẰNG 
- Trả về tên, họ và loại liên hệ cho liên hệ được chỉ định.
BẮT ĐẦU
    TUYÊN BỐ
        @FirstName NVARCHAR (50),
        @LastName NVARCHAR (50),
        @ContactType NVARCHAR (50);
  
    - Nhận thông tin liên hệ phổ biến
    LỰA CHỌN
        @BusinessEntityID = BusinessEntityID,
@FirstName = FirstName,
        @LastName = LastName
    TỪ Người. Người
    WHERE BusinessEntityID = @BusinessEntityID;
  
    SET @ContactType =
        TRƯỜNG HỢP
            - Kiểm tra nhân viên
            KHI TỒN TẠI (CHỌN * TỪ Nguồn nhân lực. Nhân viên NHƯ e
                WHERE e.BusinessEntityID = @BusinessEntityID)
                THÌ 'Nhân viên'
  
            - Kiểm tra nhà cung cấp
            KHI TỒN TẠI (CHỌN * TỪ Person.BusinessEntityContact AS bec
                WHERE bec.BusinessEntityID = @BusinessEntityID)
                VẬY 'Nhà cung cấp'
  
            - Kiểm tra cửa hàng
            KHI TỒN TẠI (CHỌN * TỪ Mua hàng. Người gửi AS v
                WHERE v.BusinessEntityID = @BusinessEntityID)
                SAU ĐÓ 'Liên hệ với cửa hàng'
  
            - Kiểm tra người tiêu dùng cá nhân
            KHI TỒN TẠI (CHỌN * TỪ Bộ phận Bán hàng. Khách hàng NHƯ c
                WHERE c.PersonID = @BusinessEntityID)
                VẬY 'Người tiêu dùng'
        CHẤM DỨT;
  
    - Trả lại thông tin cho người gọi
    NẾU @BusinessEntityID KHÔNG ĐẦY ĐỦ
    BẮT ĐẦU
        INSERT @retContactInformation
        CHỌN @BusinessEntityID, @FirstName, @LastName, @ContactType;
    CHẤM DỨT;
  
    TRỞ VỀ;
CHẤM DỨT;
ĐI
  
CHỌN BusinessEntityID, FirstName, LastName, ContactType
TỪ dbo.GetContactInformation (2200);
ĐI
CHỌN BusinessEntityID, FirstName, LastName, ContactType
TỪ dbo.GetContactInformation (5);
 

F. Sử dụng CASE trong mệnh đề HAVING

Ví dụ sau sử dụng biểu thức CASE trong mệnh đề HAVING để hạn chế các hàng được trả về bởi câu lệnh SELECT. Câu lệnh trả về tỷ lệ hàng giờ tối đa cho mỗi chức danh trong bảng HumanResources.E Employee . Điều khoản HAVING hạn chế các chức danh do nam giới nắm giữ với mức lương tối đa lớn hơn 40 đô la hoặc phụ nữ có mức lương tối đa lớn hơn 42 đô la.

  SỬ DỤNG AdventureWorks2012;
ĐI
CHỌN JobTitle, MAX (ph1.Rate) AS MaximumRate
TỪ Nguồn Nhân lực. Nhân viên NHƯ e
THAM GIA HumanResources.EpriseePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityID
NHÓM THEO JobTitle
CÓ (MAX (TRƯỜNG HỢP KHI Gender = 'M'
        THEN ph1.Rate
        ELSE NULL END) & gt; 40,00
     HOẶC TỐI ĐA (TRƯỜNG HỢP KHI Giới tính = 'F'
        THEN ph1.Rate
        ELSE NULL END) & gt; 42,00)
ĐẶT HÀNG THEO MaximumRate DESC;
 

Ví dụ: Phân tích Azure Synapse và Hệ thống Nền tảng Analytics (PDW)

G. Sử dụng câu lệnh SELECT với biểu thức CASE

Trong một câu lệnh SELECT, biểu thức CASE cho phép các giá trị được thay thế trong tập kết quả dựa trên các giá trị so sánh. Ví dụ sau sử dụng biểu thức CASE để thay đổi cách hiển thị của các danh mục dòng sản phẩm để làm cho chúng dễ hiểu hơn. Khi một giá trị không tồn tại, dòng chữ “Không phải để bán” được hiển thị.

  - Sử dụng AdventureWorks
  
CHỌN ProductAlternateKey, Category =
      CASE ProductLine
         KHI 'R' THEN 'Đường'
         KHI 'M' THEN 'Núi'
         KHI 'T' THÌ 'Đi lưu diễn'
         KHI NÀO 'S' THÌ 'Các mặt hàng giảm giá khác'
         ELSE 'Không bán'
      CHẤM DỨT,
   EnglishProductName
TỪ dbo.DimProduct
ĐẶT HÀNG BẰNG ProductKey;
 

Ví dụ sau sử dụng biểu thức CASE trong câu lệnh CẬP NHẬT để xác định giá trị được đặt cho cột Giờ nghỉ cho nhân viên có SalariedFlag được đặt thành 0. Khi trừ đi 10 giờ kể từ VacationHours dẫn đến giá trị âm, VacationHours tăng thêm 40 giờ; nếu không, VacationHours sẽ tăng thêm 20 giờ.

  - Sử dụng AdventureWorks
  
CẬP NHẬT dbo.DimEprisee
SET VacationHours =
    ( TRƯỜNG HỢP
         KHI nào ((Giờ đi nghỉ - 10.00) & lt; 0) THÌ Số giờ đi nghỉ + 40
         ELSE (Giờ đi nghỉ + 20.00)
       CHẤM DỨT
    )
WHERE SalariedFlag = 0;
 

Xem thêm

Biểu thức (Giao dịch-SQL)
CHỌN (Giao dịch-SQL)
COALESCE (Giao dịch-SQL)
IIF (Transact-SQL)
CHỌN (Giao dịch-SQL)

Xem Thêm  Hộp kiểm JavaScript - javascript kiểm tra một hộp kiểm


Xem thêm những thông tin liên quan đến chủ đề câu lệnh chuyển đổi ms sql

SQL Server DBA Tutorial 43-How to Change the Ownership of a Database in SQL Server

  • Tác giả: TechBrothersIT
  • Ngày đăng: 2015-04-15
  • Đánh giá: 4 ⭐ ( 7177 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: In this video you will learn how to change owner of a database in SQL Server? video provides different following ways to do it.
    1- How to change database owner using Store Procedure
    2- How to change database owner using Alter Authorization statement.

    Blog post link for the video with script
    http://sqlage.blogspot.com/2015/04/how-to-change-ownership-of-database-in.html

    Visit our website to check out SQL Server DBA Tutorial Step by Step
    http://www.techbrothersit.com/2014/12/sql-server-dba-tutorial.html

Hướng dẫn lập trình SQL Server Transact-SQL

  • Tác giả: openplanning.net
  • Đánh giá: 5 ⭐ ( 7500 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

UPDATE trong SQL Server

  • Tác giả: comdy.vn
  • Đánh giá: 5 ⭐ ( 1762 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tìm hiểu cách sử dụng câu lệnh UPDATE trong SQL Server để thay đổi dữ liệu hiện có trong một bảng.

Xử lý Date trong SQL

  • Tác giả: viettuts.vn
  • Đánh giá: 5 ⭐ ( 4863 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bảng dưới đây liệt kê tất cả các hàm xử lý Date trong SQL. Ngoài những hàm quan trong dưới đây, có nhiều hàm khác được hỗ trợ bởi các RDBMS khác nhau.

Tổng hợp những câu lệnh SQL cơ bản

  • Tác giả: topdev.vn
  • Đánh giá: 5 ⭐ ( 5485 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Các phiên bản của SQL Server: Enterprise, Personal, Desktop, Developer,.. Các bộ phận của SQL Server: Enterprise Manager, Query Analyzer, Books Online,..

Các câu lệnh thường dùng trong ngôn ngữ SQL

  • Tác giả: unitrain.edu.vn
  • Đánh giá: 4 ⭐ ( 1099 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Sử dụng câu lệnh ALTER DATABASE để di chuyển DATABASE trong SQL Server

  • Tác giả: nq.com.vn
  • Đánh giá: 4 ⭐ ( 8140 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Cách thêm giá trị vào từ điển bằng Python - làm thế nào để thêm một cái gì đó vào một python từ điển

By ads_php