【问题标题】:Using Sum function [duplicate]使用 Sum 函数
【发布时间】:2015-01-01 17:09:11
【问题描述】:

我有以下结构的表:

TestTable (ID INT, LoanID INT, Amount INT)

ID  LoanID  Amount
1   1        20
2   1        30
3   1        15
4   2        40
5   2        20
6   3        50

我想在这种情况下计算 LoanAmounts

ID  LoanID  Amount  Sum
1   1       20      20
2   1       30      50
3   1       15      65
4   2       40      40
5   2       20      60
6   3       50      50

获取此 Sum 列的最佳方法是什么(当然没有光标 :)

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    您可以使用相关子查询来获取running-totals

    SELECT t.ID, t.LoanID, t.Amount,
           [Sum] = (SELECT SUM(AMOUNT)
                    FROM TestTable t2
                    WHERE t.LoanID=t2.LoanID
                    AND t2.ID <= t.ID)
    FROM TestTable t
    

    Demo

    【讨论】:

      【解决方案2】:

      不幸的是,SQL Server 2008 没有一个 clean 函数来进行累积和,因此您需要将所有具有相同 LoadID 的“先前”行相加:

      SELECT
        ID,
        LoanID,  
        Amount,
        (SELECT SUM(Amount) FROM TestTable t2 WHERE t2.LoanID = t.LoanID AND t2.ID <= t.ID) Sum
      FROM TestTable t
      

      【讨论】:

      • 不是累加和,看OP输出,id 4有40作为sum,id 3有65
      • @RADAR 它是累积的每个LoanID
      • @D Stanley,您的查询很好+1
      【解决方案3】:
      select ID, LoanID, Amount, 
             (select sum(Amount)
              from TestTable A
              where  A.LoanID = B.LoanID and
                     A.ID <= B.ID
             ) as Sum
      from TestTable B;
      

      【讨论】:

        【解决方案4】:

        通过使用窗口函数:

        select *, sum(amount) over (partition by loanid order by id) as "sum" from testtable;
        

        SQL 服务器 2012: http://sqlfiddle.com/#!6/dc108/8

        SQL 服务器 2008: http://sqlfiddle.com/#!3/dc108/10

        它适用于 SQL server 2012,但不适用于使用 sqlfiddle 的 sql server 2008。

        【讨论】:

          【解决方案5】:

          试试这个

            SELECT b.id,a.LoanID,b.Amount,
                     Sum(a.Amount) AS [Sum]
              FROM   #temp_table a
              JOIN   #temp_table b ON a.id <= b.id
                            AND a.LoanID = b.LoanID
              GROUP  BY b.id,a.LoanID,b.Amount
          

          【讨论】:

            【解决方案6】:
            SELECT SUM(column_name) FROM table_name;
            

            【讨论】:

              猜你喜欢
              • 2019-09-01
              • 2014-07-15
              • 1970-01-01
              • 2016-09-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-11-29
              • 2019-01-02
              相关资源
              最近更新 更多