SQL Sum 多行合二为一

标签 sql function group-by sum

我需要有关 SUM 功能的一些帮助。我试图将同一帐户的账单金额汇总为一个总计,但我得到的结果显示我的 SUM 列只是将我的第一列乘以 3。

这是我想要的模拟数据结果:

AccountNumber    Bill      BillDate   
1                100.00    1/1/2013     
1                150.00    2/1/2013   
1                200.00    3/1/2013 
2                75.00     1/1/2013  
2                100.00    2/1/2013   

询问:
SELECT AccountNumber, Bill, BillDate, SUM(Bill)
FROM Table1
GROUP BY AccountNumber, Bill, BillDate


AccountNumber    Bill      BillDate    SUM(Bill)
1                100.00    1/1/2013    450.00    
1                150.00    2/1/2013    450.00
1                200.00    3/1/2013    450.00
2                75.00     1/1/2013    175.00
2                100.00    2/1/2013    175.00

或者
AccountNumber    Bill      SUM(Bill)
1                100.00    450.00    
2                75.00     175.00

如果可能,我更愿意同时获得这两个结果。

这是我得到的:

我的 SUM 列只是乘以 3,它实际上并不是根据帐号对数据进行求和。
AccountNumber    Bill      BillDate    SUM(Bill)
1                100.00    1/1/2013    300.00    
1                150.00    2/1/2013    450.00
1                200.00    3/1/2013    600.00
2                75.00     1/1/2013    225.00
2                100.00    2/1/2013    300.00

最佳答案

如果您不想对结果进行分组,请使用窗口函数。

您没有说明您的 DBMS,但这是 ANSI SQL:

SELECT AccountNumber, 
       Bill, 
       BillDate, 
       SUM(Bill) over (partition by accountNumber) as account_total
FROM Table1
order by AccountNumber, BillDate;

这是一个 SQLFiddle:http://sqlfiddle.com/#!15/2c35e/1

您甚至可以通过添加以下内容来添加运行总和:
sum(bill) over (partition by account_number order by bill_date) as sum_to_date

这将为您提供截至当前行日期的总数。

关于SQL Sum 多行合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21243589/

相关文章:

python - 从 groupby pandas 中获取 MultiIndex

java - 使用身份 id 在 derby 中导入数据

SQLite:根据另一个表中设置的条件更新一列

Javascript:函数中的 forEach 方法?

c++ - 指向 C 字符串的指针?

mysql - 分组后选择中的子查询

python - Pandas - 根据唯一值和不同的列日期时间过滤 DataFrame

sql - SQL 中 WHERE 和 HAVING 的区别

python - 如何获得具有一定差异的行?

php - 在 php 中不能有名为 default 的函数