2

この種の質問が多く寄せられていることは承知していますが、私が見ている投稿は、私がやろうとしていること、または違いを生むことにまったく適合していないようです。タイプ ID と保存日、次にそのタイプ ID とタイプ名を持つ別のテーブル。

私が望むのは、設定された日付範囲内に保存されたすべてのタイプを表示するが、そのタイプがまったく表示されないのではなく、0 カウントが表示されるようにすることです。クエリを単なるカウントとして実行すると、まさに私が望むことを行います

SELECT     dbo.RequestType.Type, COUNT(dbo.Requests.RequestType) AS Count
FROM         dbo.RequestType LEFT OUTER JOIN
                      dbo.Requests ON dbo.RequestType.TypeID = dbo.Requests.RequestType
GROUP BY dbo.RequestType.Type

しかし、次のように日付範囲を設定すると:

SELECT     dbo.RequestType.Type, COUNT(dbo.Requests.RequestType) AS Count
FROM         dbo.RequestType LEFT OUTER JOIN
                      dbo.Requests ON dbo.RequestType.TypeID = dbo.Requests.RequestType
WHERE     (dbo.Requests.DateSaved BETWEEN CONVERT(DATETIME, '2013-01-01 00:00:00', 102) AND CONVERT(DATETIME, '2013-03-30 00:00:00', 102))
GROUP BY dbo.RequestType.Type

その後、0 カウントは表示されませんか?

ありがとう

4

2 に答える 2

2

エラーは、WHERE句内のすべてがレコードに対してチェックされるため、左外部結合の右側にあるテーブルを参照すると、結合の外部性が取り消されることです。その句を に移動するだけです。ON

SELECT     dbo.RequestType.Type, 
  COUNT(dbo.Requests.RequestType) AS Count
FROM dbo.RequestType 
LEFT OUTER JOIN dbo.Requests 
ON dbo.RequestType.TypeID = dbo.Requests.RequestType
  AND     (dbo.Requests.DateSaved 
    BETWEEN CONVERT(DATETIME, '2013-01-01 00:00:00', 102)
    AND CONVERT(DATETIME, '2013-03-30 00:00:00', 102))
GROUP BY dbo.RequestType.Type
于 2013-06-05T23:19:36.153 に答える