13

I am working in SQL Server 2008 and trying to use a IF, ELIF, ELSE statement in the SELECT section of my code. What I want to do is the following:

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)

The problem is that I do not understand how to do a IF, ELIF, ELSE type transaction in SQL. I have tried to search for this type of example and came across python examples...wrong language so I did a search on the MSDBN site and did not see this sort of work, just IF/ELSE.

Thank You

MCP_infiltrator
  • 3,961
  • 10
  • 45
  • 82

2 Answers2

21

You want a CASE expression. CASE evaluates in order and the first match is what is returned in the query.

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
...
ypercubeᵀᴹ
  • 113,259
  • 19
  • 174
  • 235
JNK
  • 63,321
  • 15
  • 122
  • 138
  • 1
    is `BO.REFERENCELOWERLIMIT <= BO.VALUE <= BO.REFERENCEUPPERLIMIT` valid t-sql? – T I Mar 28 '13 at 14:17
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
T I
  • 9,785
  • 4
  • 29
  • 51