无法链接MS Access查询与子查询

我在Access中创build了一个带有子查询的查询,并且无法在Excel 2003中链接它:当我使用菜单Data – > Import External Data – > Import Data...并selectmdb文件时,查询不存在名单。 如果我使用菜单Data – > Import External Data – > New Database Query... ,我可以在列表中看到我的查询,但在导入向导的末尾,我得到这个错误:

 Too few parameters. Expected 2. 

我的猜测是查询语法造成的问题,实际上查询包含一个子查询。 所以,我将尝试描述查询目标和结果语法。

表位置

  • ID(自动编号,主键)
  • 位置(双)
  • currency_id(long)(引用Currency.ID)
  • 投资组合(长)

表货币

  • ID(自动编号,主键)
  • 代码(文本)

查询目标

  • join2个表格
  • 按产品组合过滤= 1
  • 在(“A”,“B”)中通过currency.code过滤
  • 按货币分组并计算每个货币组的仓位总和,调用结果:sumOfPositions
  • 计算每个货币组的abs(sumOfPositions)
  • 计算以前结果的总和作为单个结果

询问

没有最后总和的查询可以使用devise视图创build。 生成的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; 

所以,问题是:是否有一个更好的方式来构造查询,以使导出工作?

我看不出有太多的错误,但我会拿出一些垃圾的访问放入和缩小到这个查询,希望这应该运行好:

 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 

可能值得尝试在MS Access查询定义中声明参数并定义它们的数据types。 当您尝试使用MS Access本身之外的查询时,这一点尤其重要,因为它无法自动检测参数types。 这种做法有时候会碰撞或错过,但值得一试。

 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; 

我已经解决了我的问题,因为外部查询正在做一个微不足道的事实。 在Excel中selectNew Database Query...时,在过程结束时,按下Finish ,会popup一个Import Data表单,询问

你想把数据放在哪里?

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