Sql 表联接未返回准确的结果;你知道为什么吗?
每年,我们部门都会向员工征求捐款,以帮助支持癌症研究、药物和酒精等方面的研究 我们已经建立了一个系统,帮助员工减轻供款压力 目前,我们有与我目前拥有的这个问题相关的表格 它们是emp、dept和贡献表 Emp表包含我们组织中所有员工的列表 Dept表包含部门列表 最后,每次员工进行供款时,员工的ID和供款日期戳都会记录在供款表中 无论每位员工是否在供款,都必须填写此表。员工可以选择供款,或者勾选“我现在不想供款”框 我的任务是提供一份尚未填写表格的员工名单 如果员工ID在emp表上,但不在当前yeardate_印章的供款表上,则该员工未填写表格 到目前为止,我的查询返回的emp表中未填写表单的员工不到一半。我们希望此代码返回emp表中当前年度尚未在供款表中的员工列表 现在,由于缴款季节从2012年11月27日开始,我们希望此查询返回emp表上的所有员工 非常感谢你的帮助Sql 表联接未返回准确的结果;你知道为什么吗?,sql,sql-server,sql-server-2008,sql-server-2005,Sql,Sql Server,Sql Server 2008,Sql Server 2005,每年,我们部门都会向员工征求捐款,以帮助支持癌症研究、药物和酒精等方面的研究 我们已经建立了一个系统,帮助员工减轻供款压力 目前,我们有与我目前拥有的这个问题相关的表格 它们是emp、dept和贡献表 Emp表包含我们组织中所有员工的列表 Dept表包含部门列表 最后,每次员工进行供款时,员工的ID和供款日期戳都会记录在供款表中 无论每位员工是否在供款,都必须填写此表。员工可以选择供款,或者勾选“我现在不想供款”框 我的任务是提供一份尚未填写表格的员工名单 如果员工ID在emp表上,但不在当前y
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;
如果我理解正确的话,你需要这样的东西
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)
)
尝试使用已存在的
选择e.lastname、e.firstname、1时为活动大小写,然后选择0时为“是”,然后选择“否”或“其他”结束
来自emp e,d部门
其中d.dept\u代码=e.dept\u代码
并且不存在从c.employee_id=e.employee_id的供款中选择“x”
希望对您有所帮助。Yeardate返回int。。。为什么不把一个where条件,比如Yeardate>2012,也看看EXISTS语句。为了考虑贡献表,我们可以在it@IoanaIonasek是的,但在这种情况下,我们需要捐款表中没有的所有记录,因此,我认为《不在》对那些阅读我们的问题的人来说更清楚:非常感谢专家们的及时回复。我真的很感激@Godfre,你的代码运行得很好,Roman Pekar的工作得更好,因为它捕获了emp表中的所有记录。ChidiOkeh,没问题。