1

我在 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;

所以,问题是:有没有更好的方法来构建查询以使导出工作?

4

3 回答 3

1

我看不出它有太多错误,但我会取出一些垃圾访问放入并将查询缩小到这个,希望这应该运行正常:

SELECT Sum(Abs(A.SumOfPosition)) As SumAbs
FROM (SELECT C.code, Sum(P.position) AS SumOfposition
      FROM Currency As C INNER JOIN Positions As P ON C.ID = P.currency_id
      WHERE P.portfolio=1
      GROUP BY C.code
      HAVING C.code In ("A","B")) As A
于 2012-05-21T15:34:23.813 回答
0

可能值得尝试在 MS Access 查询定义中声明您的参数并定义它们的数据类型。当您尝试在 MS Access 本身之外使用查询时,这一点尤其重要,因为它无法自动检测参数类型。这种方法有时会成功或失败,但值得一试。

PARAMETERS [[Positions].[portfolio]] Long, [[Currency].[code]] Text ( 255 );
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;
于 2012-05-21T16:36:43.513 回答
0

我已经解决了我的问题,这要归功于外部查询的总和是微不足道的。在 Excel 中选择New Database Query...时,在过程结束时,按 后,会弹出Finish一个表单,询问Import Data

你想把数据放在哪里?

你可以点击Create a PivotTable report...。如果正确定义数据透视表,Excel 将仅显示外部总和。

于 2012-05-22T07:35:27.010 回答