2011-07-07 27 views
30

Trong bảng của tôi, tôi có một cột có giá trị là 0 hoặc 1. Nếu cột đó là 0 I, xuất ra giá trị là 'no'; nếu 1 tôi nên xuất là 'có' cho tất cả các hàng. Làm thế nào tôi có thể làm điều này chỉ bằng cách sử dụng câu lệnh SQL. Cảm ơnSQL Server INLINE NẾU ELSE

Trả lời

51

SQL Server không có một inline if tuyên bố, nhưng nó có một inline case có thể được sử dụng để thực hiện như nhau.

Trường hợp có hai hình thức, một là:

select 
case MyFlag 
    when 1 then 'YES' 
    when 0 then 'NO' 
    else 'OOPS' 
end 
from MyTable 

nơi nó được sử dụng giống như một công tắc bằng các ngôn ngữ C-like và thứ hai là:

select 
case 
    when MyFlag = 1 then 'YES' 
    when MyFlag = 0 then 'NO' 
    -- when some unrelated condition... 
    else 'OOPS' 
end 
from MyTable 

nơi nó senquentially đánh giá một danh sách các điều kiện và trả về điều kiện đầu tiên được hoàn thành.

P.S. Phần end là bắt buộc và tôi thường quên điều đó. Nó cũng thường cho một case stament đơn giản để được inlined hoàn toàn, giống như

select (case MyFlag when 1 then 'Yes' else 'No' end) as MyFlagDesc 
7

Something như thế này:

SELECT 
    CASE YourColumn 
     WHEN 0 THEN 'no' 
     WHEN 1 THEN 'yes' 
     ELSE 'nothing' 
    END 
FROM dbo.YourTable 
8

Có hai khả năng:

(CASE WHEN condition1 THEN Value1 ELSE Value2 END) 

hay, giải pháp hoàn thiện nhất:

(CASE value_to_check WHEN Value1 THEN Result1 [WHEN ... THEN ...] ELSE OtherResult END) 
47

Tôi hiểu rằng đây câu hỏi (hiển thị ở đầu kết quả của google cho "máy chủ nội tuyến sql nếu") là 2 tuổi, nhưng với SQL Server 2012, câu trả lời có phần lỗi thời . Nó cũng có vẻ là một bản sao của SQL inline if statement type question, nhưng câu hỏi đó (thậm chí là một câu hỏi cũ hơn), cũng không có câu trả lời cập nhật.

Trong SQL Server 2012 bạn có thể sử dụng IIF function:

IIF (boolean_expression, true_value, false_value) 

Ví dụ:

SELECT IIF(someColumn = 1, 'yes', 'no') 
+1

upvoted, tôi thích IIF so CASE cho điều kiện boolean đơn giản vì nó là hợp lý hơn – Breakskater

+0

đây là câu trả lời thoải mái, cảm ơn. –

1

Tôi trộn ba IIF trong một dòng, tôi có ba biến và tôi muốn biết cái nào là lớn hơn 0 nhưng tôi biết thứ tự ưu tiên PersonHomePhoneID, PersonWorkPhoneID và PersonCellPhoneID

IIF(@PersonHomePhoneID > 0 , @PersonHomePhoneID, IIF(@PersonWorkPhoneID > 0 , @PersonWorkPhoneID, IIF(@PersonCellPhoneID > 0 , @PersonCellPhoneID, 0))) 

Câu trả lời của câu hỏi:

IIF(column = 1 , 'yes', IIF(column = 0, 'no', ''))