Làm cách nào để tôi thực hiện IF IF THEN trong SQL CHỌN?


1508

Làm thế nào để tôi thực hiện một IF...THENtrong một SQL SELECTtuyên bố?

Ví dụ:

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product

14
Bạn có thể muốn xem liên kết này . Về: Mệnh đề SQL WHERE: Tránh CASE, sử dụng logic Boolean
Ai đó

3
@Som somebody: không thực sự có liên quan vì bài viết nói về việc sử dụng các quy tắc viết lại logic để chuyển đổi một hàm ý thành một hàm. Manh mối là từ 'logic', nghĩa là một cái gì đó phân giải thành đúng hoặc sai, không áp dụng cho phép chiếu. Bài viết TL; DR áp dụng cho WHERECHECKkhông SELECT.
onedaywhen

6
Câu trả lời của @ MartinSmith là thanh lịch nhất - sử dụng IIF trong SQL 2012+.
Murray Foxcroft

Câu trả lời:


1760

Câu CASElệnh gần nhất với IF trong SQL và được hỗ trợ trên tất cả các phiên bản của SQL Server.

SELECT CAST(
             CASE
                  WHEN Obsolete = 'N' or InStock = 'Y'
                     THEN 1
                  ELSE 0
             END AS bit) as Saleable, *
FROM Product

Bạn chỉ cần làm CASTnếu bạn muốn kết quả là giá trị Boolean. Nếu bạn hài lòng với một int, điều này hoạt động:

SELECT CASE
            WHEN Obsolete = 'N' or InStock = 'Y'
               THEN 1
               ELSE 0
       END as Saleable, *
FROM Product

CASEbáo cáo có thể được nhúng trong các CASEbáo cáo khác và thậm chí bao gồm trong tổng hợp.

SQL Server Denali (SQL Server 2012) thêm câu lệnh IIF cũng có sẵn trong quyền truy cập (được chỉ ra bởi Martin Smith ):

SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product

57
Chỉ cần một lời cảnh báo bổ sung không bao gồm các điều kiện của bạn trong phanh khi sử dụng trường hợp. Mất khá nhiều thời gian để nhận ra điều đó :)
Archan Mishra

17
và đừng quên END
Simon_Weaver

8
và bit AS!
Cas Bloem

8
Trường hợp, Khi nào, Khác và Kết thúc nên được thụt lề song song (dọc theo cùng một dòng) - và chỉ sau đó nên được thụt vào bên trong - hoạt động tốt nhất đối với tôi.
Ujjwal Singh

6
@ReeveStrife Chỉ iif SQL Server 2012+
stuartdotnet

327

Tuyên bố trường hợp là bạn của bạn trong tình huống này và có một trong hai hình thức:

Trường hợp đơn giản:

SELECT CASE <variable> WHEN <value>      THEN <returnvalue>
                       WHEN <othervalue> THEN <returnthis>
                                         ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>

Các trường hợp mở rộng:

SELECT CASE WHEN <test>      THEN <returnvalue>
            WHEN <othertest> THEN <returnthis>
                             ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>

Bạn thậm chí có thể đặt các báo cáo trường hợp theo một thứ tự theo mệnh đề cho thứ tự thực sự ưa thích.


32
Tôi biết điều này đã cũ, nhưng tôi nghĩ cần lưu ý rằng bạn có thể thêm một AS Col_Namesau khi ENDđặt tên cột kết quả
Ben

9
Tôi luôn cảm thấy như cái thứ 2 đơn giản hơn.
Hogan

4
Đồng ý, tôi hầu như luôn kết thúc bằng cách sử dụng câu lệnh mở rộng vì các điều kiện tôi muốn kiểm tra luôn phức tạp hơn chỉ là một biến. Nó cũng chỉ cảm thấy dễ dàng hơn để đọc.
Magnum_pi

1
Giải thích tốt về cả hai tình huống, có hoặc không có biến. Với biến, điều kiện cần thỏa mãn một đẳng thức giữa biến sau câu lệnh case và trường hợp bạn dựa vào điều kiện của mình, không có biến bạn có thể thêm điều kiện tự cung cấp để kiểm tra.
Remus.A

Tôi thuận tiện hơn với tùy chọn thứ hai. Hai người đều tốt như nhau.
Stanley Okpala Nwosa

277

Từ SQL Server 2012, bạn có thể sử dụng IIFchức năng này.

SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM   Product

Đây thực sự chỉ là một cách viết tốc ký (mặc dù không phải là SQL chuẩn) CASE.

Tôi thích sự đồng nhất khi so sánh với CASEphiên bản mở rộng .

Cả hai IIF()CASEgiải quyết dưới dạng các biểu thức trong một câu lệnh SQL và chỉ có thể được sử dụng ở những nơi được xác định rõ.

Biểu thức CASE không thể được sử dụng để kiểm soát luồng thực thi các câu lệnh Transact-SQL, khối câu lệnh, hàm do người dùng định nghĩa và các thủ tục được lưu trữ.

Nếu các nhu cầu của bạn không thể được thỏa mãn bởi những hạn chế này (ví dụ: nhu cầu trả về các tập kết quả có hình dạng khác nhau phụ thuộc vào một số điều kiện) thì SQL Server cũng có một IFtừ khóa thủ tục .

IF @IncludeExtendedInformation = 1
  BEGIN
      SELECT A,B,C,X,Y,Z
      FROM   T
  END
ELSE
  BEGIN
      SELECT A,B,C
      FROM   T
  END

Tuy nhiên, đôi khi phải cẩn thận để tránh các vấn đề đánh hơi thông số với phương pháp này .


6
Đây sẽ là câu trả lời nếu bạn muốn IF .. sau đó là câu lệnh trong SQL.
Mr.J

91

Bạn có thể tìm thấy một số ví dụ hay trong Báo cáo Sức mạnh của SQL CASE và tôi nghĩ rằng tuyên bố mà bạn có thể sử dụng sẽ giống như thế này (từ 4guysfromrolla ):

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees

4
xem: meta.stackexchange.com/questions/103053/ cho một cuộc thảo luận thú vị. Tôi hai liên kết bạn cung cấp thêm bối cảnh, mà tôi hỗ trợ.
Sam Saffron

2
Tài liệu tham khảo thực sự hữu ích và rất được khuyến khích trong trường hợp có thêm thông tin chi tiết
baymax

75

Sử dụng TRƯỜNG HỢP. Một cái gì đó như thế này.

SELECT Salable =
        CASE Obsolete
        WHEN 'N' THEN 1
        ELSE 0
    END

50
SELECT  
(CASE 
     WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
                                            ELSE 'NO' 
 END) as Salable
, * 
FROM Product

48

Máy chủ Microsoft SQL (T-SQL)

Trong một select, sử dụng:

select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end

Trong một wheremệnh đề, sử dụng:

where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end

1
tại sao bạn không làm where Obsolete = 'N' or InStock = 'Y'và cắt giảm một nửa thực tế
maksymiuk

46

Từ liên kết này , chúng ta có thể hiểu IF THEN ELSEtrong T-SQL:

IF EXISTS(SELECT *
          FROM   Northwind.dbo.Customers
          WHERE  CustomerId = 'ALFKI')
  PRINT 'Need to update Customer Record ALFKI'
ELSE
  PRINT 'Need to add Customer Record ALFKI'

IF EXISTS(SELECT *
          FROM   Northwind.dbo.Customers
          WHERE  CustomerId = 'LARSE')
  PRINT 'Need to update Customer Record LARSE'
ELSE
  PRINT 'Need to add Customer Record LARSE' 

Điều này không đủ tốt cho T-SQL?


3
Đây không phải là những gì người yêu cầu muốn, nhưng rất hữu ích để biết rằng bạn có thể sử dụng nếu các câu lệnh bên ngoài một câu lệnh chọn.
Jonathan

2
EXISTS là tốt bởi vì nó đá ra khỏi vòng tìm kiếm nếu tìm thấy mục. Một COUNT chạy cho đến hết các hàng của bảng. Không có gì để làm với câu hỏi, nhưng một cái gì đó để biết.
JustJohn

45
 SELECT
   CASE 
      WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE' 
      ELSE 'FALSE' 
   END AS Salable,
   * 
FROM PRODUCT

32

Câu lệnh if-other đơn giản trong SQL Server:

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand';
ELSE
PRINT 'By Ravi Anand.';

GO

Nếu ... câu lệnh khác trong SQL Server - lồng nhau

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand.';
ELSE
BEGIN
IF @val < 50
  PRINT 'what''s up?';
ELSE
  PRINT 'Bye Ravi Anand.';
END;

GO

2
Muộn nhưng có thể sử dụng được bên trong SELECTnhư OP yêu cầu?
abdul qayyum 17/2/19

25

Một tính năng mới, IIF (mà chúng ta có thể sử dụng đơn giản), đã được thêm vào trong SQL Server 2012:

SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product

1
Câu trả lời này lặp lại (với ít chi tiết hơn) những gì đã được Martin Smith cung cấp trong câu trả lời vài năm trước.
jk7

1
@ jk7 đây là câu trả lời đầu tiên cho câu hỏi.
sandeep rawat

3
Không phải từ những gì tôi thấy. Nó nói rằng câu trả lời của bạn đã được đăng vào ngày 26 tháng 4 năm 16 và Martin đã được đăng vào ngày 20 tháng 7 năm 11.
jk7

24

Sử dụng câu lệnh CASE:

SELECT CASE
       WHEN (Obsolete = 'N' OR InStock = 'Y')
       THEN 'Y'
       ELSE 'N'
END as Available

etc...

23

Sử dụng logic bit thuần túy:

DECLARE @Product TABLE (
    id INT PRIMARY KEY IDENTITY NOT NULL
   ,Obsolote CHAR(1)
   ,Instock CHAR(1)
)

INSERT INTO @Product ([Obsolote], [Instock])
    VALUES ('N', 'N'), ('N', 'Y'), ('Y', 'Y'), ('Y', 'N')

;
WITH cte
AS
(
    SELECT
        'CheckIfInstock' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Instock], 'Y'), 1), 'N'), 0) AS BIT)
       ,'CheckIfObsolote' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Obsolote], 'N'), 0), 'Y'), 1) AS BIT)
       ,*
    FROM
        @Product AS p
)
SELECT
    'Salable' = c.[CheckIfInstock] & ~c.[CheckIfObsolote]
   ,*
FROM
    [cte] c

Xem bản demo hoạt động: nếu sau đó không có casetrong SQL Server .

Để bắt đầu, bạn cần tính ra giá trị truefalsecho các điều kiện đã chọn. Đây là hai NULLIF :

for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1)
for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)

kết hợp với nhau cho 1 hoặc 0. Tiếp theo sử dụng toán tử bitwise .

Đó là phương pháp WYSIWYG nhất .


19
-1 cho mã Obfuscation. Nghiêm túc mà nói, đây là khoảng cách xa WYSIWYG như bạn có thể nhận được! Một mớ hỗn độn không thể đọc được và nếu tôi phải làm việc với mã của bạn, tôi sẽ chửi rủa suốt ngày ... xin lỗi: - /
Heliac

2
@Heliac đặt phần cte vào View và bạn sẽ không bao giờ thấy sự lộn xộn. Đối với lâu dài và phức tạp VÀ, HOẶC, KHÔNG phải nó dễ đọc hơn CASE (tất nhiên phần đó nằm ngoài cte).
Tomasito

1
Tôi đã cho điểm này là +1 vì sự gọn gàng, một khi nó ở dạng cte, nhưng lưu ý rằng câu trả lời hiện tại không đúng cho câu hỏi. Bạn cần một '|' không phải là một '&'.
Đánh dấu Hurd

3
Hoàn toàn đồng ý với @Heliac. Mặc dù nó đúng về mặt cú pháp và hoạt động tốt, nhưng nó không dễ dàng hỗ trợ. Đặt nó vào CTE sẽ chỉ di chuyển đoạn mã không thể đọc được ở nơi khác.
objectNotFound

1
Phương pháp bảng kiểm tra kết hợp có thể có lợi thế của nó. Sử dụng biến bảng và nối nó với truy vấn hiện tại có thể cung cấp giải pháp dựa trên tập hợp mà không có trường hợp. Câu trả lời này là một ví dụ nghèo nàn, nhưng bản thân ý tưởng bảng có giá trị.
Suncat2000

19
SELECT 1 AS Saleable, *
  FROM @Product
 WHERE ( Obsolete = 'N' OR InStock = 'Y' )
UNION
SELECT 0 AS Saleable, *
  FROM @Product
 WHERE NOT ( Obsolete = 'N' OR InStock = 'Y' )


14
case statement some what similar to if in SQL server

SELECT CASE 
            WHEN Obsolete = 'N' or InStock = 'Y' 
               THEN 1 
               ELSE 0 
       END as Saleable, * 
FROM Product

2
Bạn có thể vui lòng đặt một số lời giải thích về cách trả lời câu hỏi này?
Guanxi

@Guanxi: mặc dù không phải là câu trả lời của tôi, một 'trường hợp' khái quát một 'nếu-thì-khác' (từ 2 trường hợp đến nhiều người)
JosephDoggie

Bạn có thể xây dựng?
Peter Mortensen

13

Đây không phải là một câu trả lời, chỉ là một ví dụ về câu lệnh CASE được sử dụng ở nơi tôi làm việc. Nó có một tuyên bố CASE lồng nhau. Bây giờ bạn biết tại sao mắt tôi bị lác.

 CASE orweb2.dbo.Inventory.RegulatingAgencyName
    WHEN 'Region 1'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'Region 2'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'Region 3'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'DEPT OF AGRICULTURE'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactAg
    ELSE (
            CASE orweb2.dbo.CountyStateAgContactInfo.IsContract
                WHEN 1
                    THEN orweb2.dbo.CountyStateAgContactInfo.ContactCounty
                ELSE orweb2.dbo.CountyStateAgContactInfo.ContactState
                END
            )
    END AS [County Contact Name]

1
Bản chỉnh sửa được định dạng lại các câu lệnh Case hoàn toàn tốt và đẹp mắt và làm cho nó dễ hiểu hơn nhưng SQL vẫn sẽ gộp lại trong chế độ xem đang sử dụng nó.
JustJohn

1
Tôi chỉ đi lang thang tại sao CASEtrở nên lạc quan và được đánh dấu là một câu trả lời thay vì câu trả lời IFnên là câu trả lời, như câu này, đây vẫn là một CASEtuyên bố, không phải là một IF.
Mr.J

@ Mr.J: mặc dù không phải là câu trả lời của tôi, một 'trường hợp' khái quát một 'nếu-thì-khác' (từ 2 trường hợp đến nhiều người)
JosephDoggie

12

Nếu bạn lần đầu tiên chèn kết quả vào một bảng, thay vì chuyển kết quả từ bảng này sang bảng khác, thì điều này hoạt động trong Oracle 11.2g:

INSERT INTO customers (last_name, first_name, city)
    SELECT 'Doe', 'John', 'Chicago' FROM dual
    WHERE NOT EXISTS 
        (SELECT '1' from customers 
            where last_name = 'Doe' 
            and first_name = 'John'
            and city = 'Chicago');

4
các thẻ nói SQL Server, TSQL
Malachi

11

Là một giải pháp thay thế cho CASEtuyên bố, một cách tiếp cận dựa trên bảng có thể được sử dụng:

DECLARE @Product TABLE (ID INT, Obsolete VARCHAR(10), InStock VARCHAR(10))
INSERT INTO @Product VALUES
(1,'N','Y'),
(2,'A','B'),
(3,'N','B'),
(4,'A','Y')

SELECT P.* , ISNULL(Stmt.Saleable,0) Saleable
FROM
    @Product P
    LEFT JOIN
        ( VALUES
            ( 'N', 'Y', 1 )
        ) Stmt (Obsolete, InStock, Saleable)
        ON  P.InStock = Stmt.InStock OR P.Obsolete = Stmt.Obsolete

Kết quả:

ID          Obsolete   InStock    Saleable
----------- ---------- ---------- -----------
1           N          Y          1
2           A          B          0
3           N          B          1
4           A          Y          1

Salable được sử dụng trong điều kiện truy vấn?
Bhavin Thummar

Nó có thể được sử dụng trong điều kiện.
Serkan Arslan

9
SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 
             END AS Saleable, * 
FROM Product

6

Đối với những người sử dụng SQL Server 2012, IIF là một tính năng đã được thêm vào và hoạt động như một giải pháp thay thế cho các câu lệnh Case.

SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM   Product 

1
Câu trả lời này lặp lại (với ít chi tiết hơn) những gì đã được Martin Smith cung cấp trong câu trả lời vài năm trước.
jk7

6
  SELECT IIF(Obsolete = 'N' OR InStock = 'Y',1,0) AS Saleable, * FROM Product

7
Xin chào Surjeet Singh Bisht; mã của bạn có thể đúng, nhưng với một số ngữ cảnh, nó sẽ trả lời tốt hơn; ví dụ: bạn có thể giải thích cách thức và lý do thay đổi được đề xuất này sẽ giải quyết vấn đề của người hỏi, có lẽ bao gồm một liên kết đến tài liệu liên quan. Điều đó sẽ làm cho nó hữu ích hơn đối với họ và cũng hữu ích hơn đối với những người đọc trang web khác đang tìm giải pháp cho các vấn đề tương tự.
Vince Bowdren

5
Câu trả lời này không thêm bất cứ điều gì mới. Trong thực tế, chính xác dòng này là một phần của câu trả lời được chấp nhận trong hơn 5 năm .
SL Barth - Tái lập lại

1
Ngoài ra, điều quan trọng cần đề cập là IIF chỉ áp dụng cho SQL Server bắt đầu từ năm 2012
Ivan Rascon

5

Bạn có thể có hai lựa chọn để thực hiện điều này:

  1. Sử dụng IIF, được giới thiệu từ SQL Server 2012:

    SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
  2. Sử dụng Select Case:

    SELECT CASE
        WHEN Obsolete = 'N' or InStock = 'Y'
            THEN 1
            ELSE 0
        END as Saleable, *
        FROM Product

4

Câu hỏi:

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product

ANSI:

Select 
  case when p.Obsolete = 'N' 
  or p.InStock = 'Y' then 1 else 0 end as Saleable, 
  p.* 
FROM 
  Product p;

Sử dụng bí danh - ptrong trường hợp này - sẽ giúp ngăn chặn các vấn đề.


3

Sử dụng SQL CASE giống như các câu lệnh If / Else bình thường. Trong truy vấn bên dưới, Nếu giá trị lỗi thời = 'N' hoặc Nếu giá trị InStock = 'Y' thì Đầu ra sẽ là 1. Nếu không, đầu ra sẽ là 0. Sau đó, chúng tôi đặt giá trị 0 hoặc 1 đó dưới Cột có thể bán được.

SELECT
      CASE 
        WHEN obsolete = 'N' OR InStock = 'Y' 
        THEN 1 
        ELSE 0 
      END AS Salable
      , * 
FROM PRODUCT

1
Âm thanh tốt. Có lẽ từ hoặc hai để giải thích nó?
JQSOFT

Nó giống như các câu lệnh If / Else bình thường. Nếu giá trị lỗi thời = 'N' hoặc Nếu giá trị InStock = 'Y' thì Đầu ra sẽ là 1. Nếu không, đầu ra sẽ là 0.
Tharuka

1
Cảm ơn bạn. Vui lòng chỉnh sửa bài viết của bạn để thêm giải thích này. Giống như: Cách If..Then...Else..sử dụng câu lệnh SQLnhư sau ....
JQSOFT

2
SELECT 
  CAST(
    CASE WHEN Obsolete = 'N' 
    or InStock = 'Y' THEN ELSE 0 END AS bit
  ) as Saleable, * 
FROM 
  Product

8
Từ đánh giá: Chào mừng bạn đến với Stack Overflow! Xin đừng trả lời chỉ với mã nguồn. Cố gắng cung cấp một mô tả hay về cách giải pháp của bạn hoạt động. Xem: Làm thế nào để tôi viết một câu trả lời tốt? . Cảm ơn
sunıɔ qɐp

3
Tôi nghĩ bạn sẽ thấy điều này không thực thi, vì nó thiếu bất kỳ đầu ra nào sau từ khóa 'THEN'.
Dodecaphone

Bạn có thể xây dựng?
Peter Mortensen

2

Nó sẽ là một cái gì đó như thế:

SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is under 30"
END AS QuantityText
FROM OrderDetails;

Chúng ta có thể sử dụng giá trị Số lượng trong điều kiện trong một truy vấn không? ví dụSELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN "The quantity is greater than 30" WHEN Quantity = 30 THEN "The quantity is 30" ELSE "The quantity is under 30" END AS QuantityText FROM OrderDetails WHERE QuantityText = 'The quantity is 30';
Bhavin Thummar

1

Để hoàn thiện, tôi sẽ thêm rằng SQL sử dụng logic ba giá trị. Cách diễn đạt:

obsolete = 'N' OR instock = 'Y'

Có thể tạo ra ba kết quả khác nhau:

| obsolete | instock | saleable |
|----------|---------|----------|
| Y        | Y       | true     |
| Y        | N       | false    |
| Y        | null    | null     |
| N        | Y       | true     |
| N        | N       | true     |
| N        | null    | true     |
| null     | Y       | true     |
| null     | N       | null     |
| null     | null    | null     |

Vì vậy, ví dụ nếu một sản phẩm đã lỗi thời nhưng bạn không biết sản phẩm đó có phải là instock hay không thì bạn không biết sản phẩm đó có bán được không. Bạn có thể viết logic ba giá trị này như sau:

SELECT CASE
           WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'
           WHEN NOT (obsolete = 'N' OR instock = 'Y') THEN 'false'
           ELSE NULL
       END AS saleable

Khi bạn tìm ra cách nó hoạt động, bạn có thể chuyển đổi ba kết quả thành hai kết quả bằng cách quyết định hành vi của null. Ví dụ, điều này sẽ coi null là không thể bán được:

SELECT CASE
           WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'
           ELSE 'false' -- either false or null
       END AS saleable

0

Tôi thích việc sử dụng các câu lệnh CASE nhưng câu hỏi yêu cầu một câu lệnh IF trong SQL Chọn. Những gì tôi đã sử dụng trong quá khứ là:

SELECT

   if(GENDER = "M","Male","Female") as Gender

FROM ...

Nó giống như các câu lệnh excel hoặc sheet IF trong đó có một điều kiện theo sau là điều kiện đúng và sau đó là điều kiện sai:

if(condition, true, false)

Hơn nữa, bạn có thể lồng các câu lệnh if (nhưng sau đó sử dụng nên sử dụng CASE :-)

(Lưu ý: điều này hoạt động trong MySQLWorkbench nhưng có thể không hoạt động trong các nền tảng khác)


0

Bạn có thể sử dụng Case Statement:

Select 
Case WHEN (Obsolete = 'N' or InStock = 'Y') THEN 1 ELSE 0 END Saleable,
Product.*
from Product
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.