【问题标题】:SQL Case when something AND something THENSQL Case when something AND something THEN
【发布时间】:2012-09-04 20:30:10
【问题描述】:

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。

【问题讨论】:

  • 你所拥有的应该可以工作。你试过了吗?
  • 是的,我试过了,没有出现错误,只是没有改变任何东西。我会发布我的代码。
  • 有什么不好的?您的 CASE 语句可能会遗漏一些记录并返回 NULL
  • 它减去两列,如果结果为负,则从这两列之一中减去第一。此外,我的 AND 部分是说,如果该列的值为零,则它不会从该列中减去 1。我不希望该列的数字低于零。
  • 用 ABS 包裹整个东西

标签: sql case


【解决方案1】:

根据这个MSDN article是:

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

您可以尝试在CASE 中使用CASE,如下所示:

CASE
    WHEN Column < 1
        CASE
            WHEN Column2 > 0 THEN column4 + 1
        END
END AS Column

【讨论】:

  • 谢谢,刚刚试过,如果为零,它仍然会减去该列。还有其他建议吗?
猜你喜欢
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多