【发布时间】:2016-11-01 16:09:18
【问题描述】:
当员工没有时间输入到名为employee_time et 的表中的时间卡中时,我需要报告。
我的问题是找到没有进入该周时间的人。
我使用 NOT IN 来查找表中不存在的员工 ID,因此如果记录不存在,则没有输入时间。这很好用。
Select
e.userName,
et.dateStart,
et.dateEnd
From employee_time et,
employee e
Where
e.employee_id NOT IN (Select employee_id from employee_time
where et.dateStart = date and
et.end_date = date)
Group by
e.userName,
et.startDate,
et.endDate
问题出在应用程序中,当一个人导航到员工时间输入页面时,它会为员工创建一条记录,如果员工没有输入任何时间,则结果是零小时的记录。但该记录现在确实存在。因此在上面的查询中不会找到,我用下面的方法找到了totals = 0的记录
Select
e.userName,
et.dateStart,
et.dateEnd,
SUM(et.hoursTotal) AS total
From employee_time et,
employee e
Where
e.employee_id = et.employee_id and
et.hours_total = 0
Group by
e.userName,
et.startDate,
et.endDate
这也很有效,但是我需要嫁给他们,但迄今为止没有成功。你能帮忙吗?
【问题讨论】:
-
你想从这两个查询的“联姻”中得到什么实际输出?
-
您想将
hours_total= 0 的记录视为不存在?where hours_total <> 0? -
我想要的输出是employee_ids,所以我可以访问用户名并将该人没有输入时间的报告中放置。
-
很抱歉,但第一个查询太可怕了。你知道你在交叉加入表格,不是吗?如果要显示员工 ID,为什么要显示 dtateStart 和 dateEnd?这些字段应该包含在您的结果中吗?
-
你说得对,我的交叉联接充当了内部联接,我的日期是我的报告工具 Jasper 的参数。