2016-04-28 6 views
0

私は、受取受領テーブルと返却テーブルを持っています。 2つの表の情報は、それぞれの表にSALES_REP表のRep_ID属性があることを除けば、互いに独立しています。ACCESSサブクエリと集計の計算

最初のサブクエリでは、月ごとに各営業担当者のSALES RECEIPTテーブルから "Total Sales"と "Gross Commission"の合計を計算します。

2番目のサブクエリでは、月ごとに各営業担当者のRETURNSテーブルから "Return Sales"と "Lost Commission"の合計を計算します。

メインクエリでは、「売上高合計」、 「グロスコミッション」、「リターンセールス」、「ロストコミッション」および「ネットコミッション」を毎月表示したいとします。 「ネットコミッション」は「総委員会」から「ロストコミッション」を差し引いたものです。私が持っているコードで

、私はエラーメッセージが表示されます:

「Microsoft Accessデータベースエンジンは、入力テーブルまたはクエリを見つけることができません 『totSales』は存在し、その名前のスペルが正しいことを確認します。」

Select 
    totSales.Year-Month as [Month/Year], 
    SALES_REP.rep_name as [Sales Person], 
    SUM(totSales.[Total Sales]) as [Total Sales], 
    SUM(totSales.[Gross Commission]) as [Gross Commission], 
    SUM(totReturns.[Return Sales],0) as [Sales Returns], 
    SUM(totReturns.[Lost Commission],0) as [Lost Commission], 
    Round([Gross Commission] - [Lost Commission],2) AS [Net Commission], 


    (SELECT 
     Format(SALES_RECEIPT.sale_date,'yyyy-mm') AS [Year-Month], 
     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, 


    (SELECT 
     RETURNS.rep_id, 
     (Nz(RETURNS.selling_price * 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 

From (totSales 
    LEFT JOIN totReturns on totReturns.rep_id = totSales.rep_id) 
    INNER JOIN SALES_REP ON totSales.REP_ID = SALES_REP.rep_id 

Group By totSales.Year-Month, totSales.rep_name; 

以下のクエリではなく、唯一の営業担当者のための毎月の販売手数料のデータを返します。私は、上記のクエリは以下のクエリとしてではなく、すべての販売担当者だけではなく、1営業担当者のために、まったく同じ結果を返すようにしたい。

SELECT Format(DatePart("m",months.month_start),"00") & "/" & Year(months.month_start) AS [Month/Year], 

(SELECT SALES_REP.rep_name FROM SALES_REP WHERE SALES_REP.rep_id = 1) AS [Sales Person], 

(select Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2) 
FROM SALES_RECEIPT INNER JOIN SALES_REP ON SALES_REP.REP_ID = SALES_RECEIPT.REP_ID 
WHERE SALES_RECEIPT.[SALE_DATE] between months.month_start and months.month_end and SALES_REP.rep_id = 1) AS [Total Sales], 

(SELECT Round((Sum(((Nz(SALES_RECEIPT.SELLING_PRICE,0)*Nz(sales_receipt.quantity,0))*(Nz(sales_receipt.commission_percent,100)*0.001)))),2) 
FROM SALES_RECEIPT INNER JOIN SALES_REP ON SALES_REP.REP_ID = SALES_RECEIPT.REP_ID 
WHERE SALES_RECEIPT.[SALE_DATE] between months.month_start and months.month_end and SALES_REP.rep_id = 1) AS [Gross Commission], 

(SELECT Round(Nz(Sum(returns.selling_price * returns.quantity), 0),2) 
FROM (returns inner JOIN inventory ON INVENTORY.INVENTORY_ID = returns.INVENTORY_ID) 
LEFT JOIN SALES_REP ON SALES_REP.REP_ID = returns.REP_ID 
WHERE returns.return_date between months.month_start and months.month_end AND SALES_REP.rep_id = 1) AS [Sales Returns], 

(SELECT Round(Nz((Sum(((Nz(returns.SELLING_PRICE,0)*Nz(returns.quantity,0))*(Nz(returns.commission_percent,100)*0.001)))),0),2) 
FROM (returns inner JOIN inventory ON INVENTORY.INVENTORY_ID = returns.INVENTORY_ID) 
LEFT JOIN SALES_REP ON SALES_REP.REP_ID = returns.REP_ID 
WHERE returns.return_date between months.month_start and months.month_end AND SALES_REP.rep_id = 1) AS [Lost Commission], 

(SELECT Round((Sum(((Nz(SALES_RECEIPT.SELLING_PRICE,0)*Nz(sales_receipt.quantity,0))*(Nz(sales_receipt.commission_percent,100)*0.001)))),2) 
FROM SALES_RECEIPT INNER JOIN SALES_REP ON SALES_REP.REP_ID = SALES_RECEIPT.REP_ID WHERE SALES_RECEIPT.[SALE_DATE] between months.month_start and months.month_end and SALES_REP.rep_id = 1) - (SELECT Round(Nz((Sum(((Nz(returns.SELLING_PRICE,0)*Nz(returns.quantity,0))*(Nz(returns.commission_percent,100)*0.001)))),0),2) 
FROM(returns inner JOIN inventory ON INVENTORY.INVENTORY_ID = returns.INVENTORY_ID) 
LEFT JOIN SALES_REP ON SALES_REP.REP_ID = returns.REP_ID 
WHERE returns.return_date between months.month_start and months.month_end AND SALES_REP.rep_id = 1) AS [Net Commission] 

FROM 
(SELECT DateSerial(Year(sale_date), Month(sale_date), 1) AS month_start, 
DateAdd("d", -1, DateSerial(Year(sale_date), Month(sale_date) + 1, 1)) AS month_end 
FROM SALES_RECEIPT 
WHERE sale_date between #1/1/2000# And #12/31/2100# 

GROUP BY Year(sale_date), Month(sale_date)) AS months; 
+1

Round(TotCommissions - TotLostCommissions、2)AS [Net Commission]の後に選択した列は、複数のフィールドを返す括弧内のselect文です。これはSQLでは許可されていません。 この列には 'totSales'という名前を付けましたが、外側のステートメントのFROM句では、テーブルであるようにその列を参照します。このクエリが返す正確な内容は何ですか? – Leviathan

+0

私は、1人の営業担当者の月額手数料データを返すクエリのコードを投稿しました。私は新しいクエリが同じ情報を返すことを望んでいるが、すべての営業担当者に欲しい。 –

答えて

1

2つのサブクエリがクエリのFROM ... JOINセクションに入るように移動します。 @Leviathanが指摘しているように、クエリは現在、それらがフィールドであるかのように扱っています(もちろんそうではありません)。

また、グループ化するすべてのフィールドをGROUP BY句に含めてください(エイリアスを付けないでください)。エラーが発生します。

最初のクエリではスタブがあります。アクセスは、それはあなたが複数の加入をやっている括弧が好きかとおかしくあり、それが初めて動作しない場合は謝罪ので:また

Select 
    totSales.Year-Month as [Month/Year], 
    SALES_REP.rep_name as [Sales Person], 
    SUM(totSales.[Total Sales]) as [Total Sales], 
    SUM(totSales.[Gross Commission]) as [Gross Commission], 
    SUM(totReturns.[Return Sales],0) as [Sales Returns], 
    SUM(totReturns.[Lost Commission],0) as [Lost Commission], 
    Round(TotCommissions - TotLostCommissions,2) AS [Net Commission] 

FROM 
    SALES_REP 
INNER JOIN 
    (
    (SELECT 
     Format(SALES_RECEIPT.sale_date,'yyyy-mm') AS [Year-Month], 
     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, 
     (Nz(RETURNS.selling_price * RETURNS.quantity)) AS [Returns Sales], 
     ((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 totReturns.rep_id = totSales.rep_id 
) 
ON totSales.REP_ID = SALES_REP.rep_id 

Group By 
    totSales.Year-Month 
    ,SALES_REP.rep_name 
    ,Round(TotCommissions - TotLostCommissions,2) 
; 

:風のものなどを:一般的に分離するコンマを置くことが好ましいですそれらを次のフィールドを持つ行に複数のフィールド、例えば:

SELECT 
    SomeField 
    ,SomeOtherField 

ない:

SELECT 
    SomeField, 
    SomeOtherField 

一部の人々はそれについての形状のうち、実際に曲がって、そうおそらく良い取得あなた自身の不必要な批判を救うために、カンマで導く習慣を試してみてください。

+0

最初のエラーは次のとおりです。クエリ式の関数で使用されている引数の数が間違っています(返された売上高、0 '):0を次の形式で削除しました: 合計(totReturns。[Return Sales])AS [ (1)totReturns.Return Sales(2)TotCommissions(3)TotLostCommissions。入力せずに大丈夫をクリックしました。すべての列を返しましたが、「Sales Returns」および「Net Commissions」列は空白です。 –

+0

「Total Sales」、「Gross Commissions」および「Lost Commission」列の値は、はるかに高い値「月/年」と「営業担当者」列に正しい値が表示されます。 –

関連する問題