【问题标题】:SQL DB2 null calculation causing problemsSQL DB2 空值计算导致问题
【发布时间】:2011-04-13 21:46:29
【问题描述】:

我有以下 SQL:

Select dmvndn "Vendor Number", IFNULL(sum(dmsls) / sum(dmprc), 0) "Calculation"
From MyFile
Group By dmvndn

但是,当我运行它时,我的“计算”字段中仍然出现空记录。

我也尝试了 COALESCE 函数,它返回相同的结果。我得到一些记录为 0,而一些记录为空白(或为空)。

这两个字段都是 P 类型,我听说是压缩数字。

有什么想法或建议吗?

编辑 1 似乎问题不在于这些字段中的任何一个为 NULL,而是一个或两个字段为 0。当我除以零时,我得到空/空白结果。

【问题讨论】:

    标签: sql null db2 coalesce isnull


    【解决方案1】:

    试试

    Sum(IFNULL(dmsls,0)) / Sum(IFNULL(dmprc,0))
    

    【讨论】:

    • 查看数据,dmsls好像已经是0了,dmprc也已经是0了。除我的零是给我这个空白空间的原因。所以这仍然给了我相同的结果=[
    【解决方案2】:

    这种技巧可以帮助我在 MS SQL Server 中使用:

    Select
      dmvndn "Vendor Number",
      IFNULL(sum(dmsls) / NULLIF(sum(dmprc), 0), 0) "Calculation"
    From MyFile
    Group By dmvndn
    

    我想知道它在 DB2 中是否对您有帮助。

    更新:解释。

    基本上,如果除数为0,它会将除数替换为NULL。您可能知道,当至少一个操作数为NULL时,运算结果也变为NULL。

    为了说明结果为 NULL,您已经在结果中添加了 IFNULL。 then 并没有太大区别,因为没有一个操作数可能是 NULL。但是,现在使用 IFNULL 非常有意义。

    【讨论】:

    • 做到了!我尝试了很多这样的组合,但我仍在试图弄清楚这有什么不同……但它有效!哈哈。谢谢!
    • 不客气。也许我的解释尝试会帮助您看到差异(将其添加到答案中)。
    • 哦哇...这完全扭曲了我的思维过程。将零更改为空,如果为空,则为 0 ...大声笑。不错的工作!也感谢您的解释=]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 2010-10-11
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多