Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 无法将MS Access查询与子查询链接_Excel_Ms Access - Fatal编程技术网

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

Excel 无法将MS Access查询与子查询链接,excel,ms-access,Excel,Ms Access,我已使用Access中的子查询创建了一个查询,无法在Excel 2003中将其链接:当我使用菜单数据->导入外部数据->导入数据…并选择mdb文件时,该查询不在列表中。如果我使用菜单数据->导入外部数据->新建数据库查询…,我可以在列表中看到我的查询,但在导入向导结束时,我收到以下错误: Too few parameters. Expected 2. 我猜想是查询语法导致了问题,事实上查询包含一个子查询。因此,我将尝试描述查询目标和结果语法 表格位置 ID(自动编号,主键) 位置(双) 货币

我已使用Access中的子查询创建了一个查询,无法在Excel 2003中将其链接:当我使用菜单
数据
->
导入外部数据
->
导入数据…
并选择mdb文件时,该查询不在列表中。如果我使用菜单
数据
->
导入外部数据
->
新建数据库查询…
,我可以在列表中看到我的查询,但在导入向导结束时,我收到以下错误:

Too few parameters. Expected 2.
我猜想是查询语法导致了问题,事实上查询包含一个子查询。因此,我将尝试描述查询目标和结果语法

表格位置

  • ID(自动编号,主键)
  • 位置(双)
  • 货币id(长)(参考currency.id)
  • 投资组合(长期)
表货币

  • ID(自动编号,主键)
  • 代码(文本)
查询目标

  • 加入两个表
  • 按组合过滤=1
  • 按货币过滤。代码为(“A”、“B”)
  • 按货币分组并计算每个货币组的头寸总和,然后调用结果:sumOfPositions
  • 计算每个货币组的abs(头寸总和)
  • 将先前结果的总和计算为单个结果
查询

可以使用设计视图创建没有最终总和的查询。生成的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")));
为了计算最终的总和,我(在SQL视图中)执行了以下操作:


因此,问题是:有没有更好的方法来构造查询以使导出工作正常?

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

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

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

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查询定义中声明参数并定义其数据类型。当您试图在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;

可能值得尝试在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;

我已经解决了我的问题,这要感谢外部查询正在进行一个微不足道的求和。在Excel中选择
新建数据库查询…
时,在流程结束时,按
Finish
后,会弹出一个
导入数据
表单,询问

你想把数据放在哪里


您可以单击
创建数据透视表…
。如果正确定义数据透视表,Excel将只显示外部总和。

由于外部查询执行的是一个微不足道的总和,我已经解决了我的问题。在Excel中选择
新建数据库查询…
时,在流程结束时,按
Finish
后,会弹出一个
导入数据
表单,询问

你想把数据放在哪里


您可以单击
创建数据透视表…
。如果正确定义数据透视表,Excel将只显示外部总和。

谢谢,我就是这么做的。之后,Access添加了垃圾内容。无论如何,此查询无法导出到excel。我想我必须使用excel数据透视表功能,该功能获取内部查询的查询结果,并将其放入一个数据透视中,以处理最终的总和。谢谢,这就是我所做的。之后,Access添加了垃圾内容。无论如何,此查询无法导出到excel。我想我必须使用excel数据透视表功能,该功能获取内部查询的查询结果,并将其放入一个数据透视中,以处理最终的总和。