1

私はこのMSSQLクエリで少し立ち往生しているので、これについて助けていただければ幸いです。ある期間にスタッフが取った休日の数を単純に合計しようとしています。

SELECT e.EMPLOYEE_ID, COUNT(y.EMPLOYEE_ID) AS TOTAL_HOLIDAYS FROM EMPLOYEE e 
LEFT OUTER JOIN
HOLIDAY y
ON e.EMPLOYEE_ID = y.EMPLOYEE_ID
WHERE e.IS_ACTIVE = 'true'
-- AND y.[DATE] BETWEEN '20121201' AND '20121210'
GROUP BY e.EMPLOYEE_ID

このクエリの種類は私に必要なものを与えてくれますが、休日がとられるときのためのフィルターを追加したいと思います...私はこれを間違った方法で行っているに違いありません。すべての従業員をデータセットにリストする必要があります。たとえば、HOLIDAYテーブルに何もない場合でも、結果が必要です。

ID TOTAL_HOLIDAYS
1    0
2    0
etc. 

コメント行を追加しようとすると(これらの2つの日付の間に休日がないことはわかっています)、行は返されません。このクエリを書き直して、常にすべてのアクティブなEMPLOYEE_IDをリストし、2つの日付の間の休日をカウントするにはどうすればよいですか?

4

1 に答える 1

2

条件を結合に移動します。

SELECT e.EMPLOYEE_ID, COUNT(y.EMPLOYEE_ID) AS TOTAL_HOLIDAYS
FROM EMPLOYEE e 
LEFT OUTER JOIN HOLIDAY y
ON e.EMPLOYEE_ID = y.EMPLOYEE_ID
AND y.[DATE] BETWEEN '20121201' AND '20121210'
WHERE e.IS_ACTIVE = 'true'
GROUP BY e.EMPLOYEE_ID
于 2012-12-10T14:21:29.923 に答える