无法链接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将只显示外部总和。