【发布时间】:2012-03-02 16:16:15
【问题描述】:
我正在使用 Access 2003 并进行生成表查询。
我的想法是,我有多个表格,其中包含基金列表中的各种信息,我正在尝试将它们组合起来。所有表格都有 FundID 作为字段之一,这是我们用来识别每个单独基金的字段。字段 MER 有一个表,该表会不时更新。因此,我们必须在其适用期间应用 MER 值。这是我的 SQL 代码:
SELECT
[Fund Mapping].FundID,
[Fund Mapping].FundName,
[MarketValues].DateLookup,
[MarketValues].[SumOfCurrentAmt]/100 AS [MV By Fund],
[Fund Prices @ Month End].Price,
IIf([MarketValues].DateLookup<"200908",[MER (08 to Jul 09)].MER,
IIf([MarketValues].DateLookup<"200911",[MER (Aug 09 to Oct 09)].MER,
IIf([MarketValues].DateLookup<"201008",[MER (Nov 09 to Jul 10)].MER,
IIf([MarketValues].DateLookup<"201106",[MER (Aug 10 to May 11)].MER,[MER (Jun 11 to present)].MER)
)
)
) AS MER
INTO [Fund Data]
FROM [Fund Mapping],
[MER (08 to Jul 09)] RIGHT JOIN
([MER (Aug 09 to Oct 09)] RIGHT JOIN
([MER (Nov 09 to Jul 10)] RIGHT JOIN
([MER (Aug 10 to May 11)] RIGHT JOIN
([MER (Jun 11 to present)] RIGHT JOIN
([MarketValues] INNER JOIN [Fund Prices @ Month End]
ON ([MarketValues].DateLookup = [Fund Prices @ Month End].DateLookup)
AND ([MarketValues].FundID = [Fund Prices @ Month End].[Fund ID]))
ON [MER (Jun 11 to present)].FundID = [MarketValues].FundID)
ON [MER (Aug 10 to May 11)].FundID = [MarketValues].FundID)
ON [MER (Nov 09 to Jul 10)].FundID = [MarketValues].FundID)
ON [MER (Aug 09 to Oct 09)].FundID = [MarketValues].FundID)
ON [MER (08 to Jul 09)].FundID = [MarketValues].FundID
GROUP BY
[Fund Mapping].FundID,
[Fund Mapping].FundName,
[MarketValues ].DateLookup,
[SumOfCurrentAmt]/100,
[Fund Prices @ Month End].Price,
IIf([MarketValues].DateLookup<"200908",[MER (08 to Jul 09)].MER,
IIf([MarketValues].DateLookup<"200911",[MER (Aug 09 to Oct 09)].MER,
IIf([MarketValues].DateLookup<"201008",[MER (Nov 09 to Jul 10)].MER,
IIf([MarketValues].DateLookup<"201106",[MER (Aug 10 to May 11)].MER,[MER (Jun 11 to present)].MER)
)
)
)
ORDER BY
[Fund Mapping].FundID,
[MarketValues].DateLookup;
DateLookup 是格式为 YYYYMM 的字符串。我之所以使用 RIGHT JOIN 而不是 INNER JOIN 是因为可以添加新的资金,所以早期的 MER 表不会有所有的 FundID。 “MarketValues INNER JOIN Fund prices @ Month End”表应该是整个事情的基础 - 它拥有所有资金,不应从中删除任何内容。
当我尝试保存查询时,它给了我一条错误消息,说不支持 JOIN 表达式。我不知道出了什么问题或如何解决它。
请帮忙?提前致谢!
========== 更新 #1
我在设计视图中从头开始手动添加了每个连接属性和整个查询。它给了我与上面几乎相同的代码,但允许我保存(上面的代码在我尝试保存时给我一个错误)。
但是当我尝试运行查询时,它给了我一条错误消息:“无法执行 SQL 语句,因为它包含不明确的外部连接。要强制首先执行其中一个连接,请创建一个单独的执行第一个连接然后将该查询包含在您的 SQL 语句中的查询。”
就没有其他办法了吗?
========== 更新 #2
所以我进一步挖掘,能够解决问题并让查询正常运行。
原来我所要做的就是将 [Fund Mapping] 表与所有其他表一起加入!即,我选择的所有表都连接在一起。
只是想我应该更新一下,以防其他人遇到同样的问题。
感谢您的帮助!
【问题讨论】:
-
这是一个看起来很吓人的 SQL,在这种情况下我会很想写一个 VBA 过程来代替。
-
感谢您的建议,Matt,但我能够在不经历 VBA 麻烦的情况下解决它!耶! :)