Oracle SQL-不一致的查询结果

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

我正在尝试编写一个Oracle SQL查询,该查询基于employeeID选择某个日期范围(每个employeeID的范围不同),然后对该日期范围内每个员工的特定绩效指标数字求和。对于同一个员工ID,我似乎得到了不一致的结果,这取决于我选择它的方式。我的问题是:

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