【问题标题】:Running total per group in SQL Server 2008SQL Server 2008 中每组的运行总数
【发布时间】:2017-02-22 17:39:21
【问题描述】:

我的表中有 3 列:Group、Date 和 Money。

Group    Day    Money    Column4 (Does not exist yet)
 A        1     $100     $100
 B        2     $500     $500
 A        3     $-150    $-50
 B        3     $900     $1400

我要做的是创建第 4 列,这实际上是每个组的运行总计。 A 组的运行总数为 (100, 100-150=50)。

这在 SQL Server 2008 中是否可行?我获取前 3 列的代码如下:

Select [Group], [Day], sum(money) as [Money]
From Table_Name
Group by [Group], [Day]

【问题讨论】:

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


【解决方案1】:

最好的方法是使用累积和。也许是时候更新到更新版本的 SQL Server 了?

在 SQL Server 2008 中,您可以使用 apply 或相关子查询:

Select [Group], [Day], sum(money) as [Money],
       (select sum(t2.money)
        from table_name t2
        where t.group = t2.group and t2.day <= t.day
       ) as Column4
From Table_Name t
Group by [Group], [Day];

【讨论】:

    【解决方案2】:

    您可以使用窗口函数sum求累计和:

    select 
        t.*,
        sum(Money) over (partition by [group] order by [Day]) col4
    from your_table t;
    

    所以你的查询变成:

    select t.*,
        sum([Money]) over (
            partition by [group] order by [Day]
            ) col4
    from (
        select [Group],
            [Day],
            sum(money) as [Money]
        from Table_Name
        group by [Group],
            [Day]
        ) t;
    

    【讨论】:

    • 这仅适用于 SQL Server 2012 及更高版本
    猜你喜欢
    • 1970-01-01
    • 2018-01-14
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多