表连接未返回准确的结果; 任何想法为什么?

Chi*_*keh 3 sql sql-server sql-server-2005 sql-server-2008

每年,我们的部门都会征求员工的意见,以帮助支持癌症研究,药物和酒精等方面的研究.

我们已经建立了一个系统,以帮助减少员工的压力.

目前,我们有与此问题相关的表格.

它们是emp,dept和贡献表.

Emp表包含组织中所有员工的列表.

部门表包含部门列表.

最后,每次员工捐款时,员工的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;
Run Code Online (Sandbox Code Playgroud)

Rom*_*kar 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)
    )
Run Code Online (Sandbox Code Playgroud)