0

結合してデータをフィルタリングするテーブルが2つあります。これを行うためにストアドプロシージャを使用しました。私の意図は、最初のテーブル(つまり、従業員)に一致するレコードがない場合でも、2番目のテーブル(つまり、部門)からすべてのアイテムを取得し、最終的にカウントを表示することです。これが私が使用したコードのセグメントです:

select d.deptName, 
case when COUNT(*) is null then '0' else count(*) end AS total 
from Employee e 
right outer join Department d on e.deptID=d.deptID 
WHERE e.Year=@year
and e.Month=@month
group by d.deptName
order by d.deptName

しかし、それは私が望んでいたものを表示しておらず、本当の問題を理解することができませんでした。

4

2 に答える 2

1

の後にフィルター条件throughwhere句を適用するjoinと、フィルター基準を満たさないすべてのレコードがフィルターで除外されます。以下のように、結合条件自体でフィルター基準を移動してみてください。

   select d.deptName, 
         case when COUNT(*) is null then '0' else count(*) end AS total 
   from Employee e 
   right outer join Department d 
      on (e.Year=@year 
          and e.Month=@month
          and e.deptID=d.deptID)
   group by d.deptName
   order by d.deptName
于 2012-11-19T04:07:21.357 に答える
0

このようにコードを変更する必要があると思います

SELECT d.deptName, COUNT(e.deptID) AS total
   FROM Employee e
   RIGHT OUTER JOIN Department d
      ON (e.Year= @year 
          AND e.Month= @month
          AND e.deptID=d.deptID)
   GROUP BY d.deptName
   ORDER BY d.deptName

クエリについてはSQLフィドルを参照してください:http ://sqlfiddle.com/#!3/b1105 / 17

于 2012-11-19T04:30:02.287 に答える