3

毎年、私たちの部門では、がん研究、薬物、アルコールなどに関する研究を支援するために、従業員からの寄付を募っています。

社員の負担を軽減するための制度を整えています。

現在、私が現在抱えているこの問題に関連する表があります。

それらは emp、dept、contributions テーブルです。

Emp テーブルには、組織内のすべての従業員のリストが含まれています。

Dept テーブルには、部門のリストが含まれています。

最後に、従業員が寄付を行うたびに、従業員の ID と寄付の日付 (date_stamp) が寄付テーブルに記録されます。

各従業員は、寄付を行っているかどうかにかかわらず、このフォームに記入する必要があります。従業員は、寄付するか、「現時点では寄付したくない」というボックスにチェックを入れるかを選択できます。

私は、フォームに記入していない従業員のリストを提供する任務を負っています。

employeeID が emp テーブルにあり、現在の年 (date_stamp) の貢献テーブルにない場合、その従業員はフォームを完了していません。

これまでのクエリでは、フォームに記入していない emp テーブルの従業員の半分未満が返されます。このコードで、emp テーブル内の従業員のうち、今年度の貢献テーブルにはまだ含まれていない従業員のリストを返すようにします。

現在、寄付シーズンは 2012 年 11 月 27 日に始まるため、このクエリは emp テーブルのすべての従業員を返すと予想されます。

どうぞよろしくお願いいたします。

SELECT  e.lastname, e.firstname,CASE active WHEN 1 then 'Yes'WHEN 0 then 'No' else 'other'END
FROM contributions c
LEFT JOIN emp e ON e.employee_id = c.employee_id
INNER JOIN dept d ON d.dept_code = e.dept_code
WHERE Year(c.date_stamp) <> '2010' OR Year(c.date_Stamp) <> '2011' OR Year(c.date_Stamp) <> '2012'
GROUP BY e.lastname,e.firstname, e.employee_id, active
ORDER By e.lastname;
4

2 に答える 2

5

私があなたを正しく理解しているなら、あなたはこのようなものが必要です

select
    e.lastname, e.firstname
from emp as e
where
    e.employee_id not in
    (
         select c.employee_id
         from contributions as c
         where c.date_stamp >= convert(datetime, '20121127', 112)
    )
于 2012-11-26T16:54:42.293 に答える
0

EXISTS を使ってみてください

select e.lastname, e.firstname,CASE active WHEN 1 then 'Yes'WHEN 0 then 'No' else 'other'END from emp e,dept d where d.dept_code = e.dept_code and not exists( select 'x' c.employee_id = e.employee_id の投稿から)

それが役立つことを願っています。

于 2012-11-26T16:56:24.273 に答える