0

以下のクエリから期待される結果が得られません。5,262 件のレコードが返されることを期待していますが、4,279 件しか取得できません。問題が WHERE 句にあることはわかっています。WHERE 句をコメント アウトすると、予期した数のレコードが取得されますが、Type フィールドでフィルター処理する必要があるため、数量が正しくありません。助言がありますか?

SELECT
    a.Part,
    SUM(ISNULL(b.Qty,0)) AS Sales_Qty
FROM
    dbo.Parts a
    LEFT OUTER JOIN dbo.Sales b ON b.Part = a.Part
WHERE
    b.Type = 'O'
GROUP BY
    a.Part
ORDER BY
    a.Part
4

2 に答える 2

6

句の a (この場合は)の右側にあるテーブルのLEFT JOIN列に条件を設定すると、欠損値を に設定する代わりに、条件に適合しないすべての結果行が削除されます。bWHERENULL

代わりに、ON句に入れます。

SELECT
    a.Part,
    SUM(ISNULL(b.Qty,0)) AS Sales_Qty
FROM
    dbo.Parts a
    LEFT OUTER JOIN dbo.Sales b ON b.Part = a.Part AND b.Type = 'O'
GROUP BY
    a.Part
ORDER BY
    a.Part
于 2013-05-23T20:19:01.490 に答える
3

WHERE 句にフィルターを配置したため、基本的に両方のテーブルで一致する行のみを返す INNER JOIN を実行しているため、フィルターを JOIN に移動してみてください。

SELECT a.Part,
   SUM(ISNULL(b.Qty,0)) AS Sales_Qty
FROM dbo.Parts a
LEFT OUTER JOIN dbo.Sales b 
   ON b.Part = a.Part
   AND b.Type = 'O'
GROUP BY a.Part
ORDER BY a.Part
于 2013-05-23T20:18:41.133 に答える