1

我有一个查询返回 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 作为总和结果。我只想返回具有总和值的行。

任何帮助将非常感激。

4

2 回答 2

12

使用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
于 2012-06-14T09:18:07.717 回答
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
于 2012-06-14T09:20:49.527 回答