Oracle SQL-不一致的查询结果
我正在尝试编写一个Oracle SQL查询,该查询基于employeeID选择某个日期范围(每个employeeID的范围不同),然后对该日期范围内每个员工的特定绩效指标数字求和。对于同一个员工ID,我似乎得到了不一致的结果,这取决于我选择它的方式。我的问题是:Oracle SQL-不一致的查询结果,sql,oracle,Sql,Oracle,我正在尝试编写一个Oracle SQL查询,该查询基于employeeID选择某个日期范围(每个employeeID的范围不同),然后对该日期范围内每个员工的特定绩效指标数字求和。对于同一个员工ID,我似乎得到了不一致的结果,这取决于我选择它的方式。我的问题是: select c.employeeID, b.assessmentDate, c.startDate, c.endDate, sum(case when employeeProductivityMetric='15' then 1 el
select c.employeeID, b.assessmentDate, c.startDate, c.endDate,
sum(case when employeeProductivityMetric='15' then 1 else 0 end) as Metric1,
sum(case when employeeProductivityMetric='20' then 1 else 0 end) as Metric2
from assessmentTable b
inner join performanceMetricTable c on b.badgeID = c.badgeID
where b.assessmentDate between c.startDate and c.endDate
group by c.employeeID, b.assessmentDate, c.startDate, c.endDate
order by c.employeeID, b.assessmentDate;
请注意,给定的employeeID可以与多个badgeID关联
当我通过在where子句中添加以下内容来选择一个特定的employeeID(例如,2)时:
where c.employeeID=2
我得到了Metric1和Metric2的一些特定数字:
employeeID assessmentDate startDate endDate Metric1 Metric2
2 02-Jul-15 01-Jul-15 31-Jul-15 4 5
然而,当我
where c.employeeID between 1 and 3
我为员工2得到了不同的数字,比如:
employeeID assessmentDate startDate endDate Metric1 Metric2
2 02-Jul-15 01-Jul-15 31-Jul-15 3 0
有人知道为什么会这样吗?我的查询设计有问题吗
谢谢你的指点
Natalia您可以通过检索详细记录来调试此类情况: 尝试比较以下查询
-- matched records for employeeID=2
select c.employeeID, c.badgeID, b.assessmentDate, c.startDate, c.endDate,
employeeProductivityMetric
from assessmentTable b
inner join performanceMetricTable c on b.badgeID = c.badgeID
where b.assessmentDate between c.startDate and c.endDate
and c.employeeID=2
order by c.employeeID, c.badgeID, b.assessmentDate;
及
很可能,您会注意到每个查询返回的
badgeID
中存在差异。是否有可能badgeID
链接到多个employeeID
上?您是按employeeID
分组的。对于给定的值,我看不出该列上的过滤条件会如何影响行内的结果。
-- matched records for employeeID between 1 and 3
select c.employeeID, c.badgeID, b.assessmentDate, c.startDate, c.endDate,
employeeProductivityMetric
from assessmentTable b
inner join performanceMetricTable c on b.badgeID = c.badgeID
where b.assessmentDate between c.startDate and c.endDate
and c.employeeID between 1 and 3
order by c.employeeID, c.badgeID, b.assessmentDate