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 的总余额为负,因此不包括任何帐户。
(注意:这是一年一次的查询,因此性能不是真正的问题。)
这是一个非常简单的查询。要获得每个客户的总余额(非负总数):
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)
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |