过滤跨多个帐户的负余额客户

Hid*_*eld 1 sql-server sql-server-2012

我工作的公司允许他们的客户拥有多个帐户。帐户也可能是负数。因此,他们的客户余额表如下所示:

????????????????????????????????????
? Customer No. ? Account ? Balance ?
????????????????????????????????????
?           1  ?       A ?    1.00 ?
????????????????????????????????????
?           1  ?       B ?   -2.00 ?
????????????????????????????????????
?           1  ?       C ?    3.00 ?
????????????????????????????????????
?           2  ?       A ?    4.00 ?
????????????????????????????????????
?           2  ?       B ?   -5.00 ?
????????????????????????????????????
?           2  ?       C ?   -6.00 ?
????????????????????????????????????
?           3  ?       A ?    7.00 ?
????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取余额列的总和,不包括余额为负的任何客户。因此,上表的结果应为 9.00 -- 客户 1 和 3 的总余额为正,因此包括所有帐户,但客户 2 的总余额为负,因此不包括任何帐户。

(注意:这是一年一次的查询,因此性能不是真正的问题。)

ype*_*eᵀᴹ 6

这是一个非常简单的查询。要获得每个客户的总余额(非负总数):

SELECT customer_no, SUM(balance) AS total_balance
FROM accounts
GROUP BY customer_no
HAVING SUM(balance) >= 0 ;
Run Code Online (Sandbox Code Playgroud)

要获得上述所有客户余额的总和:

SELECT SUM(total_balance) AS super_total_balance
FROM
  ( SELECT SUM(balance) AS total_balance
    FROM accounts
    GROUP BY customer_no
    HAVING SUM(balance) >= 0
  ) AS t ;
Run Code Online (Sandbox Code Playgroud)

或者有一个相当神秘的变化:

SELECT TOP (1)
       SUM(SUM(balance)) OVER () AS super_total_balance
FROM accounts
GROUP BY customer_no
HAVING SUM(balance) >= 0 ;
Run Code Online (Sandbox Code Playgroud)