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

Cách sử dụng IF ... THEN Logic trong SQL Server

SQL Server có một khả năng duy nhất cho phép bạn thực thi logic lập trình theo thời gian thực trên các giá trị trong truy vấn của bạn. Dựa trên các đánh giá logic đó, bạn có thể tạo ra các giá trị khác nhau như một phần của tập dữ liệu được trả về.

Sử dụng Câu lệnh CASE

Điều này dễ dàng thực hiện nhất trong tất cả các phiên bản của SQL Server bằng cách sử dụng CASE câu lệnh, hoạt động như một IF...THEN...ELSE logic và trả về các giá trị khác nhau tùy thuộc vào kết quả.

Trong ví dụ dưới đây, chúng tôi muốn trả về một locale bổ sung cột chỉ định liệu cuốn sách của chúng tôi diễn ra ở Trung địa hay Trái đất cũ thông thường.

SELECT
  CASE
    WHEN
      books.title = 'The Hobbit'
        THEN
          'Middle-earth'
    WHEN
      books.primary_author = 'Tolkien'
        THEN
          'Middle-earth'
    ELSE
      'Earth'
  END AS locale,
  books.*
FROM
  books

Trước khi chúng tôi kiểm tra CASE đặc biệt khía cạnh của câu lệnh này, hãy tạm thời loại bỏ CASE lưu ý rằng đây là một SELECT cực kỳ đơn giản tuyên bố trên bề mặt:

SELECT
  books.*
FROM
  books

Do đó, hãy kiểm tra cách thức CASE phần có cấu trúc và hành vi hợp lý mà chúng tôi đang thực hiện.

CASE
  WHEN
    books.title = 'The Hobbit'
      THEN
        'Middle-earth'
  WHEN
    books.primary_author = 'Tolkien'
      THEN
        'Middle-earth'
  ELSE
    'Earth'
END AS locale

Để bắt đầu, chúng tôi khởi tạo CASE sau đó chỉ định theo điều kiện nào (WHEN ) CASE của chúng tôi tuyên bố nên đánh giá một kết quả. Trong ví dụ này, chúng tôi đang kiểm tra books.titlebooks.primary_author; nếu phù hợp với chủ đề Tolkien-esque của chúng tôi, THEN chúng tôi trả về giá trị ‘Middle-earth.’ Nếu không có trường nào phù hợp với tìm kiếm của chúng tôi, thay vào đó, chúng tôi trả về giá trị của ‘Earth.’

Để sắp xếp lại logic dưới dạng mã psuedo IF...THEN...ELSE , chúng tôi chỉ yêu cầu SQL đánh giá:

IF
  title == 'The Hobbit' OR
  primary_author == 'Tolkien'
THEN
  RETURN 'Middle-earth'
ELSE
  RETURN 'Earth'
END

Cuối cùng, điều quan trọng cần nhớ là CASE câu lệnh phải luôn được nối vào cuối bằng END phù hợp tuyên bố. Trong ví dụ trên, chúng tôi cũng đang đổi tên giá trị kết quả được trả về locale , mặc dù điều đó chắc chắn là tùy chọn.

Sử dụng Hàm IIF

Nếu bạn đang sử dụng phiên bản SQL hiện đại hơn, sẽ rất hữu ích khi biết rằng SQL Server 2012 đã giới thiệu IIF rất tiện dụng hàm số. IIF là một phương pháp viết tắt để thực hiện IF...ELSE / CASE và trả về một trong hai giá trị, tùy thuộc vào đánh giá của kết quả.

Cấu trúc lại ví dụ trên của chúng tôi để sử dụng IIF khá đơn giản.

SELECT
  IIF(
    books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
    'Middle-earth',
    'Earth')
  AS locale,
  books.*
FROM
  books

Với IIF , chúng tôi thay thế phần lớn rất nhiều cú pháp từ CASE câu lệnh với một vài dấu phẩy phân tách đơn giản để phân biệt các đối số của chúng ta.

Tất cả đã nói, cả CASEIIF hoàn thành công việc tương tự, nhưng nếu được lựa chọn, IIF nói chung sẽ đơn giản hơn nhiều để sử dụng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng hàm IDENTITY () trong SQL Server

  2. Cách tạo lối tắt cho SSMS và tự động kết nối với máy chủ SQL mặc định - SQ:Máy chủ / TSQL Hướng dẫn Phần 4

  3. Cài đặt và cấu hình SQL Server Log Shipping &Disaster Recovery -1

  4. Thu thập số lượng từ một truy vấn SQL

  5. Truy xuất dữ liệu từ quy trình được lưu trữ có nhiều bộ kết quả