我有一個名爲Cash_Flow_Statements
的數據庫,我需要創建一個保存的查詢來計算過去十二個月(TTM)的自由現金流量。使用MS Access數據庫追蹤十二個月公式
這裏是我的數據庫的一個例子:
這裏是我保存的查詢代碼。我已經使用這個代碼進行其他計算,所以我知道它的工作原理。我只是不知道如何在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)
我需要的變量Formula
遏制,將計算追蹤12個月的自由現金流方程。數學如下:
自由現金流量TTM =總和(運營現金流量MRQ1 +運營現金流量MRQ2 +運營現金流量MRQ3 +運營現金流量MRQ4) - 總和(資本支出MRQ1 +資本支出MRQ2 +資本支出MRQ3 +資本支出MRQ4)
MRQ =最近季度
我需要這個公式是SQL。我該怎麼做呢?
UPDATE
每@Gord湯普森的答案下面我想出了這個代碼:
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語句中。
所以我試着去適應@湯普森的答案,我已經提出了這個問題。
公式:
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代碼中,最後一行是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)
。 我幾乎肯定這是問題所在,但不知道如何糾正。
很高興看到你把它整理出來。 –
@GordThompson如果沒有你的幫助,不可能完成它。謝謝! – gromit1