SQL Sum将多行合并为一行

Jas*_*son 9 sql group-by sum function

我需要一些关于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   
Run Code Online (Sandbox Code Playgroud)

查询:

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
Run Code Online (Sandbox Code Playgroud)

要么

AccountNumber    Bill      SUM(Bill)
1                100.00    450.00    
2                75.00     175.00
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我希望得到两个结果.

这是我得到的:

我的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
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 12

如果您不想对结果进行分组,请使用窗口功能.

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

SELECT AccountNumber, 
       Bill, 
       BillDate, 
       SUM(Bill) over (partition by accountNumber) as account_total
FROM Table1
order by AccountNumber, BillDate;
Run Code Online (Sandbox Code Playgroud)

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

您甚至可以添加以下内容:

sum(bill) over (partition by account_number order by bill_date) as sum_to_date
Run Code Online (Sandbox Code Playgroud)

这将为您提供截至当前行日期的总计.


Dav*_*ych 7

BillDate正在进行分组,但每个帐户的帐单日期都不同,因此您的行不会被分组.如果你考虑一下,这甚至没有意义 - 它们是不同的账单,并且有不同的日期.同样适用于Bill- 您试图为帐户汇总账单,为什么要按此分组?

如果您离开BillDateBill离开select和group by子句,您将获得正确的结果.

SELECT AccountNumber, SUM(Bill)
FROM Table1
GROUP BY AccountNumber
Run Code Online (Sandbox Code Playgroud)


Jas*_*son 0

谢谢你的回复。事实证明我的问题是重复条目的数据库问题,而不是我的逻辑问题。快速表同步修复了该问题,并且 SUM 功能按预期工作。这些对于 SUM 功能来说仍然是有用的知识,如果您在使用它时遇到困难,那么值得阅读。

  • 那么你用来获取结果的最后一行sql是什么呢? (2认同)