2013-03-28 11 views
9

Pracuję w SQL Server 2008 i próbuję użyć instrukcji IF, ELIF, ELSE w sekcji SELECT mojego kodu. Co chcę zrobić jest następujący:IF, ELIF, ELSE w 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) 

Problemem jest to, że nie rozumiem, jak to zrobić IF, ELIF, inaczej transakcję typu SQL. Próbowałem szukać tego typu przykładu i natknąłem się na przykłady Pythona ... niewłaściwy język, więc zrobiłem wyszukiwanie w witrynie MSDBN i nie widziałem tego rodzaju pracy, tylko IF/ELSE.

Thank You

+0

Czy masz na myśli 'przypadek' oświadczenie? – ondra

+1

'IF-ELSE' w' SELECT' jest niedozwolone, prawdopodobnie chcesz 'CASE WHEN ... ELSE'. http://stackoverflow.com/questions/63447/how-do-you-perform-an-if-then-in-an-sql-select –

+0

@TimSchmelter Myślę, że 'IF' jest dozwolony w MySQL co sprawia, że ​​jest to bardziej mylące – JNK

Odpowiedz

14

Chcesz wyrażenie CASE. CASE ocenia w kolejności, a pierwsze dopasowanie jest zwracane w zapytaniu.

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

jest "BO.REFERENCELOWERLIMIT <= BO.VALUE <= BO.REFERENCEUPPERLIMIT' ważna t-sql? –

+0

@ TI nope, naprawiony – JNK

+0

Dziękuję za całą pomoc –

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 Za złapanie 'MIĘDZY' przede mną! – JNK