我需要有关 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/