Tsql SQL检查为零或空

Tsql SQL检查为零或空,tsql,conditional-statements,Tsql,Conditional Statements,嗨,我有点问题 如果执行某些算法时出错,则需要按列检查是否为null或零 这是一张桌子: col1 col2 col3 col4 1 0 3376 0 2 600 null 14468.5714 3 null 0 0 4 600 3376 null COALESCE不适用于零“0”值,case太大 我们需要意识到这一点 , CAST(COALESCE(col2, (

嗨,我有点问题

如果执行某些算法时出错,则需要按列检查是否为null或零

这是一张桌子:

col1    col2    col3    col4
1        0      3376    0
2       600     null    14468.5714
3       null    0       0
4       600     3376    null
COALESCE
不适用于零“0”值,
case
太大

我们需要意识到这一点

, CAST(COALESCE(col2, (col3/7), (col4/30)) as money) col2
, CAST(COALESCE(col3, (col2*7), (col4/30*7))as money) col3
, CAST(COALESCE(col4, (col3/7*30),(col2*30))as money) col4 

如何以最快的方式解决这个问题。ThanX

为什么不直接使用
案例
这样的条件呢

CASE WHEN col2 is not null and col2 <> 0 THEN your_calculation
当col2不为null且col2为0时,您的_计算

您可以使用CASE语句执行子查询,以检查零并返回NULL。 然后可以在子查询上运行当前查询

我发现用例会很难看,因为在COALESCE中有3个表达式

SELECT
 CAST(COALESCE(col2  , (col3/7), (col4/30)) as money) col2
, CAST(COALESCE(col3, (col2*7), (col4/30*7))as money) col3
, CAST(COALESCE(col4, (col3/7*30),(col2*30))as money) col4 
from 
( SELECT case when col2 =0 then NULL else col2 end as col2,
  case when col3 =0 then NULL else col3 end as col3,
  case when col4 =0 then NULL else col4 end as col4
from Table1) T

虽然COALESCE允许您用特定值替换NULL,但NULLIF将允许您用NULL替换特定值。您可以在0上使用后者,最终得到如下结果:

, CAST(
    COALESCE(
      NULLIF(col2, 0),
      NULLIF(col3, 0) / 7,
      NULLIF(col4, 0) / 30
    ) AS money
  ) AS col2
, CAST(
    COALESCE(
      NULLIF(col3, 0),
      NULLIF(col2, 0) * 7,
      NULLIF(col4, 0) / 30 * 7)
    ) AS money
  ) AS col3
, CAST(
    COALESCE(
      NULLIF(col4, 0),
      NULLIF(col3, 0) / 7 * 30,
      NULLIF(col2, 0) * 30
    ) AS money
  ) AS col4

如果你问我的话,仍然很长,但肯定比用例短。每个表达式中的最后一个null if可能是不必要的,为了保持一致性,我将它们保留在那里。也许您可以在任何地方添加第四个参数
0
,以确保结果永远不会为NULL。

您是说需要区分遇到0和NULL吗?我认为“null或0”的解释可能含糊不清。