我正在使用Access 2003并进行make table查询。
我的想法是,我有多个表格,其中包含基金列表中的各种信息,我正在尝试将它们组合在一起。所有表格都将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基金价格@月末”表应该是整个事情的基础 - 它拥有所有资金,并且不应该从中删除任何资金。
当我尝试保存查询时,它给出了一条错误消息,指出不支持JOIN表达式。我不知道什么是错的,或者我怎么解决它。
请帮忙吗?提前谢谢!
==========更新#1
我在设计视图中从头开始手动添加了每个连接属性和整个查询。它给了我几乎与上面相同的代码,但允许我保存(上面的代码在我尝试保存时给了我一个错误。)
但是当我尝试运行查询时,它给出了一条错误消息:“SQL语句无法执行,因为它包含不明确的外连接。要强制首先执行其中一个连接,请创建一个单独的连接查询执行第一次连接,然后在SQL语句中包含该查询。“
除此之外别无他法吗?
==========更新#2
所以我进一步挖掘了一下,并且能够解决问题并使查询正常运行。
原来我要做的就是和所有其他表一起加入[Fund Mapping]表!即,我选择的所有表格都是连在一起的。
我以为我应该提供更新以防其他人遇到同样的问题。
感谢您的帮助!
答案 0 :(得分:2)
我认为问题在于将“旧式”交叉连接与中缀连接样式混合,例如考虑这个生成相同错误的简化示例:
SELECT *
FROM T1, T2 RIGHT JOIN T3 ON T2.c = T3.c;
上述一个简单的解决方法是在另一个范围内执行RIGHT JOIN
,例如在派生中:
SELECT *
FROM T1, (
SELECT T2.*, T3.c2
FROM T2 RIGHT JOIN T3 ON T2.c = T3.c
) AS DT1;
答案 1 :(得分:0)
有关此问题的解决方案,请参阅更新#2。