【问题标题】:SQL help calculating Opening and Closing balance columnsSQL 帮助计算期初和期末余额列
【发布时间】:2016-04-27 18:01:23
【问题描述】:

我正在使用 SQL 2008 R2。我有一个包含以下列的小表:

日期 位置1 位置2 位置3

并希望计算这两列

期初余额 = 从 0 开始,之后等于前一天的期末余额 期末余额 = 期初余额 + location1 + location2 + location3

所以我基本上希望将其吐出到报告中:

DATE |  OPENING_BALANCE  | LOC1   | LOC2    |   LOC3    |  CLOSING_BALANCE
----------------------------------------------------------------------------
1/1     $0.00              $1,000    $1,000       $1,000        $3,000 
1/2     $3,000             $2,000    $2,000       $1,000        $8,000 
1/3     $8,000            ($1,000)  ($4,000)      $500          $3,500 
1/4     $3,500            $10,000   ($5,000)      $20,000       $28,500 
1/5     $28,500 

有没有简单的方法来计算这两列?帮助表示赞赏!提前致谢

** 为草率的表格示例道歉

【问题讨论】:

  • 什么数据类型是 Date、Location1、Location2。位置 3?
  • 有没有办法可以升级到 sql server 2012+?
  • Date 只是一个日期时间,例如 1/1/2016。这些位置只是花车。不幸的是,我无法升级到 2012+ :( 谢谢

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


【解决方案1】:

好的,根据您提供的信息(只有输出,没有表架构),这个查询可能适合您:

WITH cte AS
(
SELECT
    [Date],
    Loc1 = Location1,
    Loc2 = Location2,
    Loc3 = Location3,
    DayTotal = Location1 + Location2 + Location3,
    ROWNUM = ROW_NUMBER() OVER (ORDER BY [Date])
FROM
    tbl
)
SELECT 
    DATE = c1.[Date],
    OPENING_BALANCE = ISNULL(c2.OpeningDayTotals, 0),
    LOC1 = c1.Loc1,
    Loc2 = c1.Loc2,
    Loc3 = c1.Loc3,
    CLOSING_BALANCE = ISNULL(c2.OpeningDayTotals, 0) + c1.DayTotal
FROM 
    cte c1
OUTER APPLY
(
    SELECT
        OpeningDayTotals = SUM(c2.DayTotal)
    FROM
        cte c2
    WHERE
        c1.ROWNUM > c2.ROWNUM
) AS c2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多