2017-07-05 8 views
0

私は現在、私のstockportfolioを追跡するためのアクセスを使用しています。それは約20のテーブルを含んでいます。私は、エクセルにエクスポートする最も重要なデータを含めるためにクエリを使用します。 2つのデータテーブルには、同一であるが異なる値を持つ2つの名前が含まれています。これにより、Mkt_Value、Contr、およびVol(コードで示される)の合計が二重評価を受けるようになります。合計クエリから2倍の値

私は、それがサブセレクトと左の結合以外のものを使用しなければならないのを中心にしていると思います。問題は、ほとんどの場合、このクエリにクエリウィザードを使用しているため、問題にどのように対処するかがわかりません。どんな指導も大歓迎です!

tbl_datum(日付表)、tbl_positions、tbl_ARMSpositions、およびtbl_ARMSgreeksの4つの表を含むコードの抜粋を掲載しました。

ありがとうございます!

SELECT 
tbl_Positions.ARMSNAME, 
tbl_Positions.Uploaddate, 
Sum(tbl_ARMSpositions.Mkt_Value), 
Sum(tbl_ARMSpositions.Contr), 
Sum(tbl_ARMSgreeks.Vol) 


FROM 
((tbl_Datum INNER JOIN tbl_Positions ON tbl_Datum.Datum = tbl_Positions.UploadDate) 

LEFT JOIN 
tbl_ARMSpositions ON (tbl_Positions.Uploaddate = tbl_ARMSpositions.Value_Date) AND (tbl_Positions.ARMSNAME = tbl_ARMSpositions.Name)) 

LEFT JOIN 
tbl_ARMSgreeks ON (tbl_Positions.Uploaddate = tbl_ARMSgreeks.Value_Date) AND (tbl_Positions.ARMSNAME = tbl_ARMSgreeks.Name) 


GROUP BY 
tbl_Positions.ARMSNAME, 
tbl_Positions.Uploaddate; 
+0

デカルト積があるか、DBに重複データがあり、デカルト積のように見えます。私は、あなたのデータを見ることなく、伝えることはできません。 「Value_Date」または「Uploaddate」の重複を探して自分のデータを確認できます。それ以外の場合は、クエリを変更して合計とグループを削除してテストします。次に、データを見て、重複した行があるかどうかを確認します。複製(またはデカルト製品)を分離したら、それを排除する方法を教えてください。 – tgolisch

+0

はい/ sumでグループを削除すると、2つの行が表示されます。 tbl_ARMSpositionsには、同じ名前と異なるmkt_valuesを持つ項目がいくつかあります。私が考えている問題は、これらの名前がtbl_ARMSgreeksにも現れていることです(フィールドmkt_valueはありません)。手動で行を削除することはできません。なぜなら、他のデータを保持しておく必要があるからです。それらの行を合計したいので、1行の名前を変更できません。 問題は、私が合計の代わりにカウントを使用すると、重複する行に対して2の代わりに4つの項目として表示されることです。 – HejHej

+0

データベースから行を手動で削除する必要はありません。 'DISTINCT'を使って' tbl_ARMSpositions'で重複をロールアップすることができます。 – tgolisch

答えて

0

あなたのデータを見なければ、私は推測する必要があります。あなたの説明とコメントに基づいて、テーブルtbl_ARMSpositionsのデータのためにデカルト積があるようです。あなたのクエリーにこの修正を加えると、それを修正する必要があります:

SELECT 
    tbl_Positions.ARMSNAME, 
    tbl_Positions.Uploaddate, 
    Sum(tbl_ARMSpositions.Mkt_Value), 
    Sum(tbl_ARMSpositions.Contr), 
    Sum(tbl_ARMSgreeks.Vol) 
FROM 
    ( (tbl_Datum INNER JOIN tbl_Positions ON tbl_Datum.Datum = tbl_Positions.UploadDate) 
     LEFT JOIN 
     (SELECT DISTINCT Value_Date, Name FROM tbl_ARMSpositions) AS tbl_ARMSpositions ON (tbl_Positions.Uploaddate = tbl_ARMSpositions.Value_Date) AND (tbl_Positions.ARMSNAME = tbl_ARMSpositions.Name) 
    ) 
    LEFT JOIN 
    tbl_ARMSgreeks ON (tbl_Positions.Uploaddate = tbl_ARMSgreeks.Value_Date) AND (tbl_Positions.ARMSNAME = tbl_ARMSgreeks.Name) 
GROUP BY 
    tbl_Positions.ARMSNAME, 
    tbl_Positions.Uploaddate; 
+0

助けてくれてありがとう! Hm、ジョイント操作で構文エラーが発生しました。それを修正しようとしたがまだ動作していないので、アクセスにはエラーのための適切なツールがないというのは面倒なことだ。どのようなアイデアかもしれませんか? – HejHej

+0

申し訳ありませんが、私はその組み込みクエリをエイリアスする必要がありました(カッコ内にクエリを入れると、別名が必要です)LikeThis。上記のコードを修正しました。 – tgolisch

関連する問題