0

データベースに と という 2 つの保存済みクエリがFree_Cash_FlowありQuarterly_Growth_Ratesます。それらはここに示されています:

Free_Cash_Flow: ここに画像の説明を入力

Quarterly_Growth_Rates: ここに画像の説明を入力

このコードを使用すると:

SELECT * _
FROM Free_Cash_Flow AS C _
INNER JOIN Quarterly_Growth_Rates AS G _
ON (C.Ticker = G.Ticker) AND ((IIF(C.Period = 4, C.Year + 1, C.Year)) = G.Year) AND ((IIF(C.Period = 4, 1, C.Period + 1)) = G.Qtr)

これが返されます: ここに画像の説明を入力

Free_Cash_Flowは空白です。しかし、表でわかるように、Free_Cash_Flowその列にはデータがあります。が新しいテーブルに取り込まれないのはなぜですか? このクエリを同様の形式の他のテーブルで実行すると、すべてがうまく機能します。助言がありますか?

追加情報

Free_Cash_Flow 列は、それぞれの保存されたクエリの SQL ステートメントの式を使用して入力されることを付け加えたいと思います。これは私の問題と関係があるかもしれないと思います。私は本当にここで立ち往生しており、必死にこれを理解する必要があります.

Free_Cash_Flow の保存されたクエリに使用される SQL ステートメントを含むコードを次に示します。

変数:

Dim Calculation = “Free_Cash_Flow”

Dim 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))”

Dim Where_Statement = "WHERE i.Period < 5"

SQL ステートメント:

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

6 に答える 6

1

以下の C & G のように名前を変更するときに、必要な列を指定する必要があります。

SELECT C.*, G.* _
FROM Free_Cash_Flow AS C _
INNER JOIN Quarterly_Growth_Rates AS G _
ON (C.Ticker = G.Ticker) AND ((IIF(C.Period = 4, C.Year + 1, C.Year)) = G.Year) AND ((IIF(C.Period = 4, 1, C.Period + 1)) = G.Qtr)
于 2013-11-13T11:27:05.857 に答える
1

最後の部分を WHERE に変更して、それが何を返すかを確認しましたか?

WHERE ((IIF(C.Period = 4, C.Year + 1, C.Year)) = G.Year) AND
      ((IIF(C.Period = 4, 1, C.Period + 1)) = G.Qtr)
于 2013-11-12T12:01:03.237 に答える
1

具体的な理由はわかりませんが、「*」を使用することは通常は推奨されませんが、次のような名前付き列を明示的にクエリすると、より適切な答えが得られる可能性があります

select 
      C.Ticker,
      C.Year,
      C.Period,
      C.Free_Cash_Flow,
      G.Year as GrowthYear,
      G.Period as GrowthPeriod 
   from ....

テーブル名が列と同じで無視しているため、混乱する可能性があります。それぞれ「C」および「G」エイリアスで列を修飾することにより、探していることができる場合があります。

于 2013-10-29T18:49:24.987 に答える
1

理論的には、列名がテーブル名と同一であるという事実を除けば、機能しない理由はありません。データベース エンジンが混乱している可能性があります。名前を変更してみてください。

于 2013-11-14T12:47:26.073 に答える