2017-11-28 9 views
0

私はSQLの経験がないと言って前置きする必要があります。私はビデオを見たり、チュートリアルを読んだりしようとしましたが、何が起こっているのかを実際に理解する前に、より一般的な理解が必要であることがわかりました。アクセスクエリ(とSQL):2つのテーブルを結合するとき、最初のテーブルから繰り返される値をどうやって防ぐのですか?

ここに私が現在いるところがあります。

受注

enter image description here

予測

enter image description here

年度カレンダー

enter image description here


012希望

クエリ

クエリが現在

enter image description here



ここでは、クエリの私のデザインビューだし、それを下回っているされて参加方法

 Date || Part Number || Order QTY || Forecast QTY 
    10/9/2017 ||  AAA001 ||  200  ||  200 
    10/9/2017 ||  AAA002 ||  400  ||  100 
    10/9/2017 ||  AAA003 ||    ||  50 
    10/9/2017 ||  AAA004 ||    ||  500 

に参加します私のSQL。誰かがこれを目的のクエリに適合させるためにSQLを調整するのを助けることができますか?

enter image description here

クエリ

SELECT [Fiscal Calendar].Date, Orders.[Part Number], 
    Orders.QTY, Forecast.QTY 
FROM ([Fiscal Calendar] LEFT JOIN 
    Forecast 
    ON [Fiscal Calendar].Date = Forecast.Date 
    ) LEFT JOIN 
    Orders ON [Fiscal Calendar].Date = Orders.Date 
GROUP BY [Fiscal Calendar].Date, Orders.[Part Number], Orders.QTY, Forecast.QTY; 

答えて

0

のSQLあなたはJOIN条件が欠落しています。私はまた、あなたには、いくつかのより多くの集約が必要だと思う:

SELECT [Fiscal Calendar].Date, Forecast.[Part Number], 
     SUM(Orders.QTY), Forecast.QTY 
FROM ([Fiscal Calendar] LEFT JOIN 
     Forecast 
     ON [Fiscal Calendar].Date = Forecast.Date 
    ) LEFT JOIN 
    Orders 
    ON [Fiscal Calendar].Date = Orders.Date AND 
     Forecast.[Part Number] = Orders.[Part Number] 
GROUP BY [Fiscal Calendar].Date, Forecast.[Part Number], Forecast.QTY; 

EDIT:

SELECT [Fiscal Calendar].Date, Forecast.[Part Number], 
     (SELECT SUM(Orders.QTY) 
     FROM Orders 
     WHERE [Fiscal Calendar].Date = Orders.Date AND 
       Forecast.[Part Number] = Orders.[Part Number] 
     ) as QTY, 
     Forecast.QTY 
FROM [Fiscal Calendar] LEFT JOIN 
    Forecast 
    ON [Fiscal Calendar].Date = Forecast.Date; 
+0

あなたのSQLを使用して、私はエラー "JOIN式not supp orted "である。私は最初にコピー/貼り付けをしましたが、私は元のSQLに単語ごとに移動し、私が行ったように変更しました。同じ問題。 *編集:* 2番目のLEFT JOINで "AND"を使用すると問題があるようです。修正する方法がわからない – MrMusAddict

1

は、必ずあなたが達成されるわけではありません何:私はあなたが相関サブクエリであなたがやりたいことができると思い

会計カレンダーですが、ここに私が取るだろうルートです:

SELECT [Fiscal Calendar].DATE, 
    Forecast.[Part Number], 
    Sum(Orders.Qty) AS [Order QTY], 
    Sum(Forecast.Qty) AS [Forcast QTY] 
FROM [Fiscal Calendar] 
INNER JOIN (
    Forecast LEFT JOIN Orders ON (Forecast.DATE = Orders.DATE) 
    AND (Forecast.[Part Number] = Orders.[Part Number]) 
) ON [Fiscal Calendar].DATE = Forecast.DATE 
GROUP BY [Fiscal Calendar].DATE, 
Forecast.[Part Number]; 
+0

私はこれがうまくいったと思っていますが、私はちょうどこのセットアップの問題に気付きました。 Forecast QTYにNULLを持つ日付がある場合は、行が表示されません(*が*の場合は、Ordersの0より大きいQTYです)。したがって、10/10/17のパーツに200個のオーダーがあり、予測されている場合は、このテーブルには表示されません。私はnz(___、0)で式をラップしましたが、問題は修正されません。 – MrMusAddict

関連する問題