使用MSAccess数据库跟踪十二个月公式

我有一个名为Cash_Flow_Statements的数据库,我需要创建一个保存的查询,计算一个追踪十二个月(TTM)的自由现金流。

我有一个名为Cash_Flow_Statements的数据库,我需要创建一个保存的查询,计算一个追踪十二个月(TTM)的自由现金流。

下面是我的数据库的一个例子:

Cash_Flow_Statement

这里是我保存的查询的代码。我已经将此代码用于其他计算,所以我知道它的工作原理。我只是不知道如何在 SQL 中做一个 Trailing Twelve Month。

CREATE PROC " & Calculation & " AS _
SELECT Income_Statements.Ticker, Income_Statements.[Year], Income_Statements.Period, _
" & Formula & " AS TTM _
FROM (Income_Statements AS Income_Statements INNER JOIN Balance_Sheets AS Balance_Sheets ON (Income_Statements.Ticker = Balance_Sheets.Ticker) AND (Income_Statements.[Year] = Balance_Sheets.[Year]) AND (Income_Statements.Period = Balance_Sheets.Period)) _
INNER JOIN Cash_Flow_Statements AS Cash_Flow_Statements ON (Balance_Sheets.Ticker = Cash_Flow_Statements.Ticker) AND (Balance_Sheets.[Year] = Cash_Flow_Statements.[Year]) AND (Balance_Sheets.Period = Cash_Flow_Statements.Period)

我需要变量Formula来包含将计算自由现金流的拖尾十二个月的方程。

自由现金流 TTM = Sum (经营现金流 MRQ1 + 经营现金流 MRQ2 + 经营现金流 MRQ3 + 经营现金流 MRQ4)-Sum (资本支出 MRQ1 + 资本支出 MRQ2 + 资本支出 MRQ3 + 资本支出 MRQ4)

MRQ = 最近季度

我需要这个公式在 SQL 中。

UPDATE

Per @ Gord Thompson 的回答下面我想出了这个代码:

SELECT Ticker, [Year], Period, (SELECT (SUM(su.Net_Cash_Flow_Operating) - SUM(su.Capital_Expenditures)) _
FROM (SELECT Ticker, [Year], Period, Net_Cash_Flow_Operating, Capital_Expenditures _
FROM Cash_Flow_Statements _
UNION ALL _
SELECT Ticker, [Year] + 1, Period - 4, Net_Cash_Flow_Operating, Capital_Expenditures _
FROM Cash_Flow_Statements) su _
WHERE su.Ticker = s.Ticker AND su.[Year] = s.[Year] AND (su.Period Between s.Period - 3 And s.Period)) _
AS SalesLast12Months _
FROM Cash_Flow_Statements AS s

但是正如我在我的原始帖子中提到的,我需要能够设置变量Formula以包含 SQL 语句,然后将其插入到现有的 SQL 语句中。

所以我试图适应 @ Gord Thompson 的答案,我已经提出了这个。

公式:

Formula = “(SELECT (SUM(su.Net_Cash_Flow_Operating) - SUM(su.Capital_Expenditures)) _
FROM (SELECT Ticker, [Year], Period, Net_Cash_Flow_Operating, Capital_Expenditures _
FROM Cash_Flow_Statements UNION ALL SELECT Ticker, [Year] + 1, Period - 4, Net_Cash_Flow_Operating, Capital_Expenditures _
FROM Cash_Flow_Statements) su _
WHERE su.Ticker = Cash_Flow_Statements.Ticker AND su.[Year] = Cash_Flow_Statements.[Year] AND (su.Period Between Cash_Flow_Statements.Period - 3 And Cash_Flow_Statements.Period))”

SQL 语句:

"CREATE PROC " & Calculation & " AS SELECT Income_Statements.Ticker, Income_Statements.[Year], Income_Statements.Period, " & Formula & " AS TTM _
FROM (Income_Statements AS Income_Statements _
INNER JOIN Balance_Sheets AS Balance_Sheets ON (Income_Statements.Ticker = Balance_Sheets.Ticker) AND (Income_Statements.[Year] = Balance_Sheets.[Year]) AND (Income_Statements.Period = Balance_Sheets.Period)) _
INNER JOIN Cash_Flow_Statements AS Cash_Flow_Statements ON (Balance_Sheets.Ticker = Cash_Flow_Statements.Ticker) AND (Balance_Sheets.[Year] = Cash_Flow_Statements.[Year]) AND (Balance_Sheets.Period = Cash_Flow_Statements.Period)

这是结果:

enter image description here

再次,这是非常接近的,但不是我所需要的。我相信我知道是什么原因导致代码在适应时不起作用,但我不知道如何修复它。在 @ Gord Thompson 代码中,最后一行是FROM Cash_Flow_Statements AS s。当我将变量公式插入到我原来的帖子中的现有 SQL 语句中时,代码是FROM (Income_Statements AS Income_Statements _ INNER JOIN Balance_Sheets AS Balance_Sheets ON (Income_Statements.Ticker = Balance_Sheets.Ticker) AND (Income_Statements.[Year] = Balance_Sheets.[Year]) AND (Income_Statements.Period = Balance_Sheets.Period)) _ INNER JOIN Cash_Flow_Statements AS Cash_Flow_Statements ON (Balance_Sheets.Ticker = Cash_Flow_Statements.Ticker) AND (Balance_Sheets.[Year] = Cash_Flow_Statements.[Year]) AND (Balance_Sheets.Period = Cash_Flow_Statements.Period)

2

让我们不要太纠结于列,让我们集中精力选择合适的行。

假设我们有一个名为 [SalesSummary] 的表,其中包含

Item      FiscalYear  Quarter  TotalSales
--------  ----------  -------  ----------
bicycles        2011        1         100
bicycles        2011        2         200
bicycles        2011        3         300
bicycles        2011        4         400
bicycles        2012        1         500
bicycles        2012        2         600
bicycles        2012        3         700
bicycles        2012        4         800
ham             2011        1          10
ham             2011        2          20
ham             2011        3          30
ham             2011        4          40
ham             2012        1          50
ham             2012        2          60
ham             2012        3          70
ham             2012        4          80

如果我们想创建一个查询,以显示过去 12 个月(当前季度加上前 3 个季度)的季度数据以及总销售额,则可能会认为我们必须开始使用IIf()来处理从一个 FiscalYear 到下一个 FiscalYear 的“环绕”。幸运的是,我们没有,因为我们可以将相同的数据与下一个 FiscalYear_2012 的“假

    SELECT
        Item,
        FiscalYear,
        Quarter,
        TotalSales
    FROM SalesSummary
UNION ALL
    SELECT
        Item,
        FiscalYear + 1,
        Quarter - 4,
        TotalSales
    FROM SalesSummary

返回

Item      FiscalYear  Quarter  TotalSales
--------  ----------  -------  ----------
bicycles        2011        1         100
bicycles        2011        2         200
bicycles        2011        3         300
bicycles        2011        4         400
bicycles        2012        1         500
bicycles        2012        2         600
bicycles        2012        3         700
bicycles        2012        4         800
ham             2011        1          10
ham             2011        2          20
ham             2011        3          30
ham             2011        4          40
ham             2012        1          50
ham             2012        2          60
ham             2012        3          70
ham             2012        4          80
bicycles        2012       -3         100
bicycles        2012       -2         200
bicycles        2012       -1         300
bicycles        2012        0         400
bicycles        2013       -3         500
bicycles        2013       -2         600
bicycles        2013       -1         700
bicycles        2013        0         800
ham             2012       -3          10
ham             2012       -2          20
ham             2012       -1          30
ham             2012        0          40
ham             2013       -3          50
ham             2013       -2          60
ham             2013       -1          70
ham             2013        0          80

如果我们将该查询保存为 [SalesUnion],那么我们可以使用它来生成我们的总数,如下所示

SELECT 
    Item,
    FiscalYear,
    Quarter,
    TotalSales,
    (
        SELECT 
            SUM(su.TotalSales) 
            FROM SalesUnion su 
            WHERE su.Item = s.Item 
                AND su.FiscalYear = s.FiscalYear 
                AND (su.Quarter Between s.Quarter - 3 And s.Quarter)
    ) AS SalesLast12Months
FROM SalesSummary s

或者,如果你不想依靠一个保存的查询,你可以做这一切在一个去:

SELECT 
    Item,
    FiscalYear,
    Quarter,
    TotalSales,
    (
        SELECT 
            SUM(su.TotalSales) 
            FROM 
                (
                        SELECT
                            Item,
                            FiscalYear,
                            Quarter,
                            TotalSales
                        FROM SalesSummary
                    UNION ALL
                        SELECT
                            Item,
                            FiscalYear + 1,
                            Quarter - 4,
                            TotalSales
                        FROM SalesSummary
                ) su 
            WHERE su.Item = s.Item 
                AND su.FiscalYear = s.FiscalYear 
                AND (su.Quarter Between s.Quarter - 3 And s.Quarter)
    ) AS SalesLast12Months
FROM SalesSummary s

无论哪种方式,结果是

Item      FiscalYear  Quarter  TotalSales  SalesLast12Months
--------  ----------  -------  ----------  -----------------
bicycles        2011        1         100                100
bicycles        2011        2         200                300
bicycles        2011        3         300                600
bicycles        2011        4         400               1000
bicycles        2012        1         500               1400
bicycles        2012        2         600               1800
bicycles        2012        3         700               2200
bicycles        2012        4         800               2600
ham             2011        1          10                 10
ham             2011        2          20                 30
ham             2011        3          30                 60
ham             2011        4          40                100
ham             2012        1          50                140
ham             2012        2          60                180
ham             2012        3          70                220
ham             2012        4          80                260
0

变量Formula应包含以下内容:

SELECT (SUM(su.Net_Cash_Flow_Operating) - SUM(su.Capital_Expenditures)) FROM (SELECT Ticker, [Year], Period, Net_Cash_Flow_Operating, Capital_Expenditures FROM Cash_Flow_Statements UNION ALL SELECT Ticker, [Year] + 1, Period - 4, Net_Cash_Flow_Operating, Capital_Expenditures FROM Cash_Flow_Statements) su WHERE su.Ticker = c.Ticker AND su.[Year] = c.[Year] AND (su.Period Between c.Period - 3 And c.Period)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(193)
Photoshop文本效果的 CSS
上一篇
Strava-具有纬度、经度和时间的团体路线接近度
下一篇

相关推荐

  • vb如何编写程序代码Private Sub Form_Load() ' 设置窗口标题 Me.Caption = He

    示例示例VB程序代码的编写是通过使用Visual Basic编程语言来实现的。下面是一个简单的VB程序代码示例:'示例代码…

    2023-03-14 15:57:06
    0 29 34
  • code键 A Guide to Success

    示例示例code键是一个特殊的键,它可以用来输入代码。它通常位于键盘的右上角,并且有一个特殊的图标,如“#”或“@”。下面是一个简单的代码示例,使用code键来输入代码:…

    2023-02-13 08:43:06
    0 27 29
  • type c接口是啥改变你的充电体验

    示例示例Type C接口是一种新型的USB连接器,它可以支持更高的数据传输速度,比传统的USB 0接口更快。与传统的USB接口不同,Type C接口可以在两端都使用,无需额外的翻转,使连接更加方便快捷。下面是一个使用Type C接口的代码示例:…

    2023-01-12 02:06:09
    0 59 62
  • good catch什么意思:好抓住!让你的梦想变成现实

    示例示例Good catch是一种表扬语,用来表扬某人发现了一个有价值的信息或问题。它可以用来表扬别人的观察力、思考能力和分析能力。例如:…

    2023-02-17 03:14:17
    0 43 23
  • carwings是什么意思智能汽车连接系统的未来

    Carwings是日产汽车公司推出的一款远程智能汽车服务,它可以帮助用户远程监控汽车的状态和行驶信息,并且可以远程控制汽车的功能。…

    2023-01-19 13:55:38
    0 48 39
  • cvt变速箱油分几种:CVT变速箱油的种类及用法

    cvt变速箱油一般分为三种,分别是:传统cvt变速箱油:代码:CVT-1…

    2023-01-27 12:23:25
    0 42 24
  • cv人生履历:从零开始,一步步走向成功——[姓名]的职业生涯

    cv人生履历是一种概括性的文件,用于描述一个人的教育背景、工作经历、技能、专业知识和其他重要信息的文件。它可以帮助雇主评估求职者的资格,并决定是否面试或录用他们。…

    2023-02-01 13:25:09
    0 82 87
  • cs go 国际服挑战国际赛场,体验全新竞技乐趣

    CS GO国际服是一种多人在线游戏,由Valve Corporation开发,可以在Steam平台上进行游戏。它是一款基于Counter-Strike系列游戏的竞技游戏,玩家可以在两个不同的队伍中进行游戏,一个是攻击者(Terrorists),另一个是防守者(Counter-Terrorists)。玩家可以通过购买武器,装备,技能,以及其他道具来提高游戏能力。…

    2023-03-08 00:34:44
    0 63 94

发表评论

登录 后才能评论

评论列表(2条)