【发布时间】: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 包裹整个东西