【问题标题】:How to return only non-zero values from a Select sum statement如何从 Select sum 语句中仅返回非零值
【发布时间】:2012-06-14 09:13:32
【问题描述】:

我有一个查询返回 2 列和多行。如何只返回一个不为 0 或 null 的总和值?

表“audit”是这样的:

parent_link   integer;
dr            smallint
amount        decimal(18,2)

select parent_link, sum(case dr when 1 then amount else -amount end)
from audit where books = 3 group by parent_link

我正在检查放入金额列中的值是否平衡了 dr 列中的 1 和 0 值。

此查询有效并返回几千行,其中 0 作为总和结果,2 作为总和结果。我只想返回具有总和值的行。

任何帮助将不胜感激。

【问题讨论】:

    标签: sql select sum firebird


    【解决方案1】:

    使用having:

    select parent_link, sum(case dr when 1 then amount else -amount end)
    from audit
    where books = 3
    group by parent_link
    having sum(case dr when 1 then amount else -amount end) <> 0
    

    【讨论】:

    • 完美运行。非常感谢您的帮助!!
    • 如果答案是正确的,记得将问题设置为回答并最终添加投票。我们是来吃点的:)
    【解决方案2】:

    另外,试试这样的查询:(它不需要任何额外的计算)

    SELECT _inner._SUM FROM
    (
        SELECT parent_link, SUM(CASE dr WHEN 1 THEN amount ELSE -amount END) AS _SUM
          FROM audit WHERE books = 3 GROUP BY parent_link
    ) AS _inner
    WHERE _inner._SUM <> 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2014-01-18
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      相关资源
      最近更新 更多