【问题标题】:How to Use Round And nullif together?如何同时使用 Round 和 nullif?
【发布时间】:2015-01-16 03:17:45
【问题描述】:

我有一列通过以下计算计算单位重量 (g)

SELECT ROUND (Weight,0) / nullif ([Units per Carton],0) * 454 AS [Unit Weight (g)]
FROM [Item Master]

我使用 nullif 来消除除以零。但我也想在除数上使用 Round()

我试过这个:

SELECT  ROUND (Weight,0) / nullif(Round([Units per Carton],0) * 454) AS [Unit Weight (g)]
FROM [Item Master]

我试过这个:

  SELECT  nullif (ROUND (Weight,0) / (Round([Units per Carton],0) * 454) AS [Unit Weight (g)]
    FROM [Item Master]

错误: 消息 156,级别 15,状态 1,行 1 关键字“AS”附近的语法不正确。

**那么我如何在除数上将圆形函数与 nullif 结合起来? **

新编辑的代码

SELECT ROUND (Weight,0) / nullif([Units per Carton],0) * 454 AS [Unit Weight (g)]
FROM [Item Master] 

SELECT ROUND (Weight / NULLIF([Units per Carton],0),0) * 454 AS [Unit Weight (g)]
FROM [Item Master]

我尝试了上面的,我得到的结果就是这个 -> picture

结果不同,我希望结果为 151、227 和 227,但这些结果被 0 取代。

【问题讨论】:

  • 你少了一个括号:nullif (ROUND (Weight,0) )
  • @Lamak 我希望整个事情都被舍入,但只对除数进行 nullif 检查,所以我不除以零,所以我希望每箱单位被舍入并在其上进行 nuliif。 ....
  • 如果要避免除以零,为什么要使用 /nullif ([Units per Carton],0)?
  • @Blam 因为不能将数字除以零,并且我将每箱的单位作为零值,通过使用 nullif 将这些值更改为 null 并且现在我知道 null 意味着那些是零值并且除以零是不可能的,但是其他数字像 153.4456 我希望那些四舍五入到 153 为了做到这一点我需要在 nullif 上使用 Round Function,你明白了吗????跨度>

标签: sql-server tsql rounding nullif


【解决方案1】:

Null 永远不应该是股息。除以空值,您不会得到逻辑一致的结果。请记住,null 根本不是一个值,它只是“未知”的标记。 (并且 null 与 'null' 不同)。

您可以尝试使用分支条件。

SELECT 454 * ROUND( (Weight * 1.0) / CASE WHEN [Units per Carton] = 0 THEN -1  
ELSE [Units per Carton] END , 0) AS [Unit Weight (g)]

然后,任何负的权重都将替换为 0。

或者,简而言之:

SELECT  @Quotient = CASE WHEN @divisor = 0 THEN NULL
                 ELSE @dividend / @divisor END

【讨论】:

  • 我尝试了您的查询,但结果仍然存在差异,可以在此找到 -> picture 以上是访问的预期结果,以下是您的查询结果它们是不一样。
  • 啊,MS Access?我不确定它的查询功能是否与 SQL Server 数据库相同。
猜你喜欢
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多