2013-03-28 50 views
9

Tôi đang làm việc trong SQL Server 2008 và cố gắng sử dụng câu lệnh IF, ELIF, ELSE trong phần SELECT của mã của tôi. Những gì tôi muốn làm là như sau:IF, ELIF, ELSE trong T-SQL

IF BO.VALUE < BO.REFERENCELOWERLIMIT 
    THEN (BO.VALUE - BO.REFERENCELOWERLIMIT) #I WANT THIS TO BE NEGATIVE 
ELSE IF BO.REFERENCELOWERLIMIT <= BO.VALUE <= BO.REFERENCEUPPERLIMIT 
    THEN BO.VALUE 
ELSE 
    (BO.REFERENCEUPPERLIMIT - BO.VALUE) 

Vấn đề là tôi không hiểu cách thực hiện giao dịch IF, ELIF, ELSE trong SQL. Tôi đã cố gắng tìm kiếm loại ví dụ này và bắt gặp các ví dụ về python ... ngôn ngữ sai nên tôi đã tìm kiếm trên trang MSDBN và không thấy loại công việc này, chỉ cần IF/ELSE.

cảm ơn

+0

Bạn có nghĩa là 'trường hợp' tuyên bố? – ondra

+1

'IF-ELSE' trong' SELECT' không được phép, có thể bạn muốn 'TRƯỜNG HỢP KHI ... ELSE'. http://stackoverflow.com/questions/63447/how-do-you-perform-an-if-then-in-an-sql-select –

+0

@TimSchmelter Tôi nghĩ rằng 'IF' được cho phép trong MySQL làm cho điều này trở nên khó hiểu hơn – JNK

Trả lời

14

Bạn muốn có một biểu hiện CASE. CASE đánh giá theo thứ tự và kết quả khớp đầu tiên là số được trả về trong truy vấn.

SELECT 
    CASE WHEN BO.VALUE < BO.REFERENCELOWERLIMIT 
      THEN (BO.VALUE - BO.REFERENCELOWERLIMIT) 
     WHEN BO.VALUE BETWEEN BO.REFERENCELOWERLIMIT AND BO.REFERENCEUPPERLIMIT 
      THEN BO.VALUE 
     ELSE (BO.REFERENCEUPPERLIMIT - BO.VALUE) 
    END as MyColumnAlias 
... 
+1

là 'BO.REFERENCELOWERLIMIT <= BO.VALUE <= BO.REFERENCEUPPERLIMIT' hợp lệ t-sql? –

+0

@TI không, chỉ cần sửa – JNK

+0

Cảm ơn tất cả sự giúp đỡ của bạn –

5
SELECT 
    col = CASE 
      WHEN BO.VALUE < BO.REFERENCELOWERLIMIT 
       THEN BO.VALUE - BO.REFERENCELOWERLIMIT 
      WHEN BO.VALUE BETWEEN BO.REFERENCELOWERLIMIT AND BO.REFERENCEUPPERLIMIT 
       THEN BO.VALUE 
      ELSE BO.REFERENCEUPPERLIMIT - BO.VALUE 
FROM tbl 
+0

+1 Để bắt 'GIỮA' trước tôi! – JNK

Các vấn đề liên quan