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") の currency.code でフィルタ
  • 通貨ごとにグループ化し、各通貨グループのポジションの合計を計算し、結果を呼び出します: sumOfPositions
  • 各通貨グループで abs(sumOfPositions) を計算します
  • 前の結果の合計を 1 つの結果として計算する

クエリ

最終合計のないクエリは、デザイン ビューを使用して作成できます。結果の 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

私はそれであまり間違っているとは思いませんが、Accessが入れたジャンクのいくつかを取り出して、クエリをこれに縮小します。うまくいけば、これはうまくいくはずです:

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 に答える