sql - 表连接没有返回准确的结果;任何想法为什么?

标签 sql sql-server sql-server-2008 sql-server-2005

每年,我们的部门都会征集员工的捐款,以帮助支持癌症研究、药物和酒精等方面的研究。

我们建立了一个系统来帮助减轻员工的贡献压力。

目前,我们有与我目前遇到的这个问题相关的表格。

它们是 emp、dept 和 contributions 表。

Emp 表包含我们组织中所有员工的列表。

部门表包含部门列表。

最后,每次员工做出贡献时,员工的ID和贡献日期(date_stamp)记录在贡献表中。

无论是否捐款,每位员工都需要填写此表格。员工可以选择捐款,或勾选“我现在不想捐款”的复选框

我的任务是提供一份未填写表格的员工名单。

如果员工 ID 在 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;

最佳答案

好吧,如果我没理解错的话,你需要这样的东西

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)
    )

关于sql - 表连接没有返回准确的结果;任何想法为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569377/

相关文章:

mysql - 优化 ScreenWriter 的 SQL 结果

sql-server - Weka如何连接到MSSQL服务器

sql-server - 获取每个不同列值的前 5 个

sql - 创建满足给定条件的连续天数组

sql-server - 在 SQL Server 的 where 子句中使用函数 (IS_MEMBER ) 时出现基数估计警告

java - SQL Server 2008 的 JDBC 驱动程序

sql - 具有多个 where 语句的过程

php - 设置 php 变量 $userName = swift Encodable $_POST [‘userName’ ] 变量的正确语法或方法是什么?

sql - 通过 SQL LOADER 存储日期和时间值

sql-server - SQL Server : How to use UNION with two queries that BOTH have a WHERE clause?