我在 Access 中创建了一个带有子查询的查询,但无法在 Excel 2003 中链接它:当我使用菜单Data
-> Import External Data
->Import Data...
并选择 mdb 文件时,列表中不存在该查询。如果我使用菜单Data
-> Import External Data
-> New Database Query...
,我可以在列表中看到我的查询,但在导入向导结束时我收到此错误:
Too few parameters. Expected 2.
我的猜测是查询语法导致了问题,实际上查询包含一个子查询。因此,我将尝试描述查询目标和生成的语法。
表位置
- ID(自动编号,主键)
- 位置(双)
- currency_id (long) (参考 Currency.ID)
- 投资组合(长)
表币种
- ID(自动编号,主键)
- 代码(文本)
查询目标
- 加入2张桌子
- 按投资组合过滤 = 1
- 按 ("A", "B") 中的货币.code 过滤
- 按货币分组并计算每个货币组的头寸总和并调用结果:sumOfPositions
- 计算每个货币组的 abs(sumOfPositions)
- 计算之前结果的总和作为单个结果
询问
可以使用设计视图创建没有最终总和的查询。生成的 SQL 是:
SELECT Currency.code, Sum(Positions.position) AS SumOfposition
FROM [Currency] INNER JOIN Positions ON Currency.ID = Positions.currency_id
WHERE (((Positions.portfolio)=1))
GROUP BY Currency.code
HAVING (((Currency.code) In ("A","B")));
为了计算最终的 SUM,我执行了以下操作(在 SQL 视图中):
SELECT Sum(Abs([temp].[SumOfposition])) AS sumAbs
FROM [SELECT Currency.code, Sum(Positions.position) AS SumOfposition
FROM [Currency] INNER JOIN Positions ON Currency.ID = Positions.currency_id
WHERE (((Positions.portfolio)=1))
GROUP BY Currency.code
HAVING (((Currency.code) In ("A","B")))]. AS temp;
所以,问题是:有没有更好的方法来构建查询以使导出工作?