という名前のデータベースがCash_Flow_Statements
あり、Trailing Twelve Month (TTM) フリー キャッシュ フローを計算する保存済みクエリを作成する必要があります。
これが私のデータベースの例です:
そして、これが私の保存されたクエリのコードです。このコードを他の計算に使用したので、機能することがわかりました。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
Free Cash Flow の Trailing Twelve Month を計算する式を変数に含める必要があります。数学は次のようになります。
フリー キャッシュ フロー 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 コードでは、最後の行は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)
. ここに問題があることはほぼ間違いありませんが、修正方法がわかりません。