日付範囲内のユーザーの結果を合計する単純な集計クエリを実行しようとしています。すべてのユーザーを選択したいのですが、適切なレコードがない場合、クエリはそれらに対して 0 を返す必要があります。
問題は、ユーザー ID を選択するテーブルの右外部結合を使用しても、左側のテーブルのその日付範囲に存在するユーザーのみが選択されることです...
クエリは次のとおりです。
select B.fld_strcode, sum(ISNULL(fld_val, 0)) as res
from tbl_transproc A right outer join tbl_pr B on A.fld_int_id = B.fld_auto_int_id
where A.fld_dtmservicedate between '2012-04-01' and '2012-05-01'
and B.fld_bytprtypeid = 1
group by B.fld_strcode
このクエリは 13 行を返します。ID (fld_strcode) のみを選択するクエリは、25 個の一意の結果を返します。(ID ごとに) 25 行を返し、値のない行は値が 0 になるようにします。日付範囲を取り出すと (テーブル内のすべての結果を調べます)、すべてのユーザーに対して機能します。常にすべてのユーザーがテーブルに少なくとも 1 つのレコードを持つため、これは理にかなっています。一部のユーザーは、数か月間レコードを持っていません。この場合、0 を返す必要があります。
どうすればそれを達成できるかについてのアイデア。