1

SQL CASE 子句中是否可以有 and 语句?如果是这样你怎么写?

即像这样的东西?:

CASE
    When ((Column < 1) AND (Column2 > 0)) THEN column4 + 1
END as Column

我的代码执行但没有完成我想要的(没有负数):

CASE
WHEN (((Clean_Total_Time - ActivityTimeTotalMin) < 0) AND (ActivityTimeTotalMin > 0))     
THEN (ABS(DATEDIFF(hh,Total_Time,ActivityTotalTime))-1)
END as hours

我的代码确实有效并且确实完成了它应该做的,但我不想要它,因为它允许负数:

CASE
WHEN (Clean_Total_Time - ActivityTimeTotalMin) < 0
THEN (ABS(DATEDIFF(hh,Total_Time,ActivityTotalTime))-1)
END as hours

编辑:此计算的目的如下:

它减去两列,如果结果为负,则从这两列之一中减去数字一。此外,我的 AND 部分是说,如果该列的值为零,则它不会从该列中减去 1。我不希望该列的数字低于零。

唯一没有发生的事情是,如果列等于 0,它就不会被捕获。因此,只要最初是 0,我就会得到负 1。

4

1 回答 1

2

根据这篇MSDN 文章,它是:

SELECT ProductNumber, Name, "Price Range" = 
      CASE 
         ...
         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
         ELSE 'Over $1000'
      END
FROM Production.Product

我只是不认为你需要括号。

更新 1

您可以尝试像这样使用CASEinside CASE

CASE
    WHEN Column < 1
        CASE
            WHEN Column2 > 0 THEN column4 + 1
        END
END AS Column
于 2012-09-04T20:32:22.260 回答