2011-02-23 5 views
0

アクセス2003 mdbに次のクエリがあります。Accessデータベースは、フィールドの2倍のSUMを返します。

SELECT Company.Name, Company.Address, Place.Name_of_Place, Sum(Income.Value) AS Income, Sum(Invoice.Value) AS Invoice 
FROM ((Company LEFT JOIN Invoice ON Company.CompanyID = Invoice.CompanyID) LEFT JOIN Income ON Company.CompanyID = Income.CompanyID) INNER JOIN Place ON 
Place.Postal = Company.Postal 
GROUP BY Company.Name, Company.Address, Place.Name_of_Place, Company.CompanyID 
HAVING ((iif(IsNull(Sum(Invoice.Value)), 0, Sum(Invoice.Value)) - iif(IsNull(Sum(Income.Value)), 0, Sum(Income.Value))) > 0) 
ORDER BY Company.Name; 

所得フィールドの値は500ですが、クエリが1000を返し それらの左で何かが存在する必要があり、この収入テーブルが二回検索されていることを結合します。 これを解決するには? 私のプログラムでは、このコラムの2で単純な除算を行うことを考えていますが、データベースレベルでこれを解決したいと思っています。

よろしく、

答えて

4

あなたが請求書と会社に参加

Vajdaは、結果は請求書の行のように多くの行を持つことになります。したがって、会社に2つの請求書がある場合、2行となります。

次に、それを所得と結びつけると(企業ごとの行数はわかりません)、結果は収益の各行に対して2行になります。

あなたはこのように、サブクエリに頼る必要があります:それはちょうど収入の値が四倍に取得し、私はここに4行を追加するとき、私は、請求書に2行を持っていることをheappened、

SELECT 
    Company.Name, 
    Company.Address, 
    Place.Name_of_Place, 
    (SELECT SUM(Income.Value) FROM Income WHERE Income.CompanyID=Company.CompanyID) AS Income, 
    (SELECT SUM(Invoice.Value) FROM Invoice WHERE Invoice.CompanyID=Company.CompanyID) AS Invoice 
FROM 
    Company INNER JOIN Place ON Place.Postal = Company.Postal 
WHERE 
    Invoice - Income > 0 
ORDER BY 
    Company.Name; 
+0

そうですね。 – Vajda

+0

ありがとう、私はそれを管理し、私はちょうどそれらの2つの選択式からの見解を作って、期待どおりに動作します。 :) – Vajda

関連する問題