13

我正在使用 SQL Server 2008 并尝试在我的代码部分中使用IF, ELIF, ELSE语句。SELECT我想要做的是以下内容:

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)

问题是我不明白如何在 SQL 中进行 IF、ELIF、ELSE 类型的事务。我试图搜索这种类型的示例,但遇到了 python 示例...错误的语言,所以我在 MSDBN 网站上进行了搜索,没有看到这种工作,只有 IF/ELSE。

谢谢你

4

2 回答 2

20

你想要一个CASE表达。 CASE按顺序计算,第一个匹配是查询中返回的内容。

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
...
于 2013-03-28T14:09:00.840 回答
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
于 2013-03-28T14:11:30.273 回答