Sql 使用MS Access数据库跟踪12个月公式

Sql 使用MS Access数据库跟踪12个月公式,sql,vb.net,ms-access,stored-procedures,select-query,Sql,Vb.net,Ms Access,Stored Procedures,Select Query,我有一个名为Cash\u Flow\u Statements的数据库,我需要创建一个已保存的查询,用于计算后续12个月(TTM)的自由现金流 以下是我的数据库示例: 这是我保存的查询的代码。我已经将此代码用于其他计算,所以我知道它是有效的。我只是不知道如何在SQL中进行12个月的跟踪 CREATE PROC " & Calculation & " AS _ SELECT Income_Statements.Ticker, Income_Statements.[Year], In

我有一个名为
Cash\u Flow\u Statements
的数据库,我需要创建一个已保存的查询,用于计算后续12个月(TTM)的自由现金流

以下是我的数据库示例:

这是我保存的查询的代码。我已经将此代码用于其他计算,所以我知道它是有效的。我只是不知道如何在SQL中进行12个月的跟踪

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)
我需要变量
公式
来包含将计算自由现金流的后续12个月的方程式。以下是数学模型:

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

MRQ=最近一个季度

我需要这个公式在SQL中。我该怎么做

更新

根据@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)
结果是:

同样,这是非常接近,但不完全是我需要的。我相信,当我修改代码时,我知道是什么导致代码无法工作,但我还不知道如何修复它。在@Gord Thompson代码中,最后一行是现金流量表中的
,即s
。当我将变量公式从我的原始帖子插入到我现有的SQL语句中时,代码是
from(Income_Statements AS Income_Statements)_
内部将资产负债表作为资产负债表连接到(损益表。Ticker=资产负债表。Ticker)和(损益表。[年度]=资产负债表。[年度])和(损益表。期间=资产负债表。期间))_

内部将现金流量表作为现金流量表连接到(Balance\u Sheets.Ticker=Cash\u Flow\u Statements.Ticker)和(Balance\u Sheets.[Year]=Cash\u Flow\u Statements.[Year])和(Balance\u Sheets.Period=Cash\u Flow\u Statements.Period)
我几乎可以肯定这就是问题所在,但我不知道如何纠正它。

我们不要过于关注列,让我们集中精力选择适当的行

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

项目财政季度总销售额
--------  ----------  -------  ----------
自行车2011 1100
自行车2011 2200
自行车2011 3300
自行车2011 4400
自行车2012 1500辆
自行车2012 2600
自行车2012 3700
自行车2012 4800
火腿2011 110
火腿2011 220
火腿2011 330
火腿2011 440
火腿2012 150
火腿2012 260
火腿2012 370
火腿2012 480
如果我们想创建一个查询,显示过去12个月(本季度加上前3个季度)的季度数据和总销售额,人们可能会认为我们必须开始处理
IIf()。幸运的是,我们没有,因为我们可以在下一个财政年度用“假”季度复制相同的数据:2011年季度(4)变成2012年季度(0),2011年季度(3)变成2012年季度(-1),依此类推

选择
项目,,
财政部,
一刻钟
总销售额
来自SalesSummary
联合所有
挑选
项目,,
财政年度+1,
第四季度,
总销售额
来自SalesSummary
返回

项目财政季度总销售额
--------  ----------  -------  ----------
自行车2011 1100
自行车2011 2200
自行车2011 3300
自行车2011 4400
自行车2012 1500辆
自行车2012 2600
自行车2012 3700
自行车2012 4800
火腿2011 110
火腿2011 220
火腿2011 330
火腿2011 440
火腿2012 150
火腿2012 260
火腿2012 370
火腿2012 480
自行车2012-3100
自行车2012-2200
自行车2012-1300辆
自行车2012 0 400
自行车2013-3500辆
自行车2013-2600辆
自行车2013-1700辆
自行车2013 0 800
火腿2012-3 10
火腿2012-220
火腿2012-130
火腿2012 0 40
火腿2013-350
火腿2013-260
火腿2013-170
火腿2013 0 80
如果我们将该查询保存为[SalesUnion],那么我们可以使用它来生成这样的总数

选择
项目,,
财政部,
一刻钟
总销售额,
(
挑选
总额(总销售额)
来自SalesUnion su
其中su.Item=s.Item
和su.FiscalYear=s.FiscalYear
和(s.季度-3和s.季度之间的su.季度)
)销售持续12个月
来自销售
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)