customersテーブルには、2016年度に1500件の注文があった1000人の顧客がいますが、FYにはすべての顧客を合計注文数で表示します顧客がそのFYに注文をしたかどうかを判断する。しかし、SQL Server 2012の次のクエリは1490のみを表示しています。LEFT OUTER JOINに左からの主キーが含まれていない理由
ここでは表示されないことがありますか?
SELECT c.CustomerID, count(*) AS TotalOrders
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE o.FiscalYear = '2016'
GROUP BY c.CustomerID
UPDATE:
次のクエリでは、唯一の1以上のレコード(1491)を返します - まだ9つの以上のレコードが欠落します。
SELECT c.CustomerID, count(*) AS TotalOrders
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
AND o.FiscalYear = '2016'
GROUP BY c.CustomerID
where句は、結合後に適用されます。したがって、結合は、注文なしで顧客のnull値を戻しています。それらの顧客は注文はありませんので、FY2016と等しくないので、レコードは除外されています。外部ジョインに関わる制限基準をジョイン基準に移動して、ジョインに加えて制限を課すように修正します。 – xQbert
合計レコード数は1000(顧客)でなければなりません。合計の数は1500にする必要があります。合計が1500未満になる可能性のある唯一の差異は、顧客と孤立した注文を削除したことです。または1500の2016の注文のあなたのカウントは最初から間違っています。 (顧客から得意先コードを選択していない)顧客IDとFiscalYear = '2016'のレコードからいくつかのレコードを選択した注文からSELECT *を実行しますか? – xQbert
ええ、私は次のようなものをチェックし始めます:あなたのFiscalYearは、実際にはすべてのレコードの "2016"と区別できますか?タイプミスの可能性はありますか?レコードはどのように削除されていますか(bit/intフラグ)? –