0

我的数据库中有两个保存的查询,称为Free_Cash_FlowQuarterly_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

您是否尝试过将最后一部分更改为 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

从理论上讲,它没有理由不工作,除非列名与表名相同。也许您的数据库引擎对此感到困惑,请尝试重命名。

于 2013-11-14T12:47:26.073 回答
1

这可能与您的 JOIN 无关。我想知道Free_Cash_Flow是不是 OLEDB 不理解的类型。看起来它在 Open Office 中是作为货币价值的,对吧?您是否知道 OLEDB 完全可以看到该值?尝试一个更简单的查询,例如

SELECT C.Free_Cash_Flow FROM Free_Cash_Flow AS C

看看这是否有任何结果。

于 2013-10-29T19:36:45.130 回答
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

尝试像下面那样替换表名并检查 Quarterly_Growth_Rates 列是否出现,如果该列也没有出现,那么它可能是名称相同的问题。

SELECT * _
FROM Quarterly_Growth_Rates AS G _ INNER JOIN Free_Cash_Flow AS C _ON (G.Ticker = C.Ticker) AND (G.Year = (IIF(C.Period = 4, C.Year + 1, C.Year))) AND (G.Qtr = (IIF(C.Period = 4, 1, C.Period + 1)))
于 2013-11-14T12:56:07.213 回答
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 回答