2016-05-03 21 views
1

次のクエリでは、2つのテーブルでサブクエリで集約計算が行われ、それらの値がメインクエリに渡されます。アクセスクエリサブクエリの値が認識されない

(アンドレからのコメントに基づいて更新された上記のメッセージと、次のポストされたコードに注意してください。元のコードは、エラーのため実行されませんでした。)

SELECT 
    totSales.[Month] & " /" AS [Month], 
    totSales.[Year] AS [Year], 
    SALES_REP.rep_name AS [Sales Person], 
    Sum(totSales.[Total Sales]) AS [Total Sales], 
    Sum(totSales.[Gross Commission]) AS [Gross Commission], 
    Sum(Nz(totReturns.[Sales Returns],0)) AS [Sales Returns], 
    Sum(Nz(totReturns.[Lost Commission],0)) AS [Lost Commission], 
    Round([Gross Commission]-[Lost Commission]) AS [Net Commission] 

    FROM SALES_REP 

    INNER JOIN 
    (

    (SELECT 

     Format(SALES_RECEIPT.sale_date,'yyyy') AS [Year], 
     Format(SALES_RECEIPT.sale_date,'mm') AS [Month], 
     Sales_receipt.inventory_id, SALES_RECEIPT.rep_id, 
     (SALES_RECEIPT.selling_price * SALES_RECEIPT.quantity) AS [Total Sales], 
     ((Nz(SALES_RECEIPT.selling_price, 0) * Nz(SALES_RECEIPT.quantity, 0)) * (Nz(SALES_RECEIPT.commission_percent, 100) * 0.001)) AS [Gross Commission] 

    FROM SALES_RECEIPT 
    WHERE SALES_RECEIPT.sale_date Between #1/1/2000# And #12/31/2050#) AS totSales 

    LEFT JOIN 

    (SELECT 
     RETURNS.rep_id, returns.inventory_id, (Nz(RETURNS.selling_price)) * (Nz(RETURNS.quantity)) AS [Sales Returns], 
     ((Nz(RETURNS.selling_price, 0) * Nz(RETURNS.quantity, 0)) * (Nz(RETURNS.commission_percent, 100) * 0.001)) AS [Lost Commission] 

    FROM RETURNS 
    WHERE RETURNS.return_date Between #1/1/2000# And #12/31/2050#) AS totReturns 
    ON totSales.inventory_id = totReturns.inventory_id) 

    ON SALES_REP.rep_id = totSales.REP_ID 

    GROUP BY 
    totSales.[Year] 
    , totSales.[Month] 
    , SALES_REP.rep_name 
    ; 

答えて

0

2回目の試行を、あなたの元に基づいて、クエリ - あなたが得たすべてのエラーを説明することができますが:

  • totSales.Year-MonthtotSales.[Year-Month]:あなたは、SELECTおよびGROUP BY句の両方で、角括弧でこれを置く必要があります。
    それ以外の場合は[totSales.Year] minus [Month]と解釈されます。

  • SELECT SUM(totReturns.[Return Sales])しかし、totReturnsにはAS [Returns Sales]があります(返品には余分な "s"があることに注意してください)。

  • TotCommissions, TotLostCommissions:これら2つのフィールドは、FROM句のどこにも定義されていません。

+0

最新情報をお寄せいただきありがとうございますクエリはエラーなしで実行されますが、 "Total Sales"値は2倍になります。 「販売返品」の値が正しくないため、「販売返品」の値の多くは、「総売上」の3倍または4倍です。 –

+0

次のコード行にNz関数を追加すると、エラーが表示されます。「条件式のデータ型の不一致」。 Nz(RETURNS.selling_price * RETURNS.quantity)AS [Return Sales]返品のない月がいくつかあるので、Nz関数を使用してnull値の代わりにゼロを取得したいと考えています。 –

+0

@CodeMechanik:私は間違った数字を手助けすることはできません。おそらく結合によって重複したレコードが作成され、合計されます。新しい質問では、[SQL Fiddle](http://sqlfiddle.com/)でサンプルデータを聞いてください。 – Andre

関連する問題