1

という名前のデータベースがCash_Flow_Statementsあり、Trailing Twelve Month (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)

FormulaFree 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). ここに問題があることはほぼ間違いありませんが、修正方法がわかりません。

4

2 に答える 2

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

IIf()四半期ごとの数値と過去 12 か月 (現在の四半期と前の 3 四半期) の売上合計を表示するクエリを作成したい場合、「ラップ アラウンド」を処理するためにいじり始める必要があると思われるかもしれません。ある FiscalYear から次の FiscalYear へ。幸いなことに、次の FiscalYear の「偽の」四半期で同じデータを複製できるため、そうしません。2011_Q(4) は 2012_Q(0) になり、2011_Q(3) は 2012_Q(-1) になります。

    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
于 2013-10-26T10:48:42.323 に答える
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)
于 2013-10-29T13:05:12.123 に答える