SQL - 结果部分值太高 - 语法问题?

时间:2016-02-10 16:28:16

标签: sql sql-server syntax syntax-error project-server

我有一个资源规划查询,它应该显示当前年度每个会计月的每个资源的实际工作,剩余工时和总工作量

但是,所有这些行都有剩余工作 - 即当前月或未来月,但一个过去月 - 显示出太高的工作价值。

即。对于2016年1月,所有值(剩余,实际和总工作)都是正确的。 2016年2月至12月,没有一个值是正确的。

太高的值不会乘以相同的因子,并且没有为所有错误值添加常数。 这就是为什么我怀疑可能存在一些扇出问题(某些列乘以另一个列或一个项目出现的次数)由多个连接引起。

我想知道这是否是语法问题或者我是否在查询错误的字段。如果你能告诉我,如果我的查询中有什么东西导致汇总汇总有问题,那么如果你能让我知道那就太好了。)

还有可能需要注意的重要信息:

工作是从项目,作业和任务聚合而来的,因为查询旨在显示此级别的详细信息。但是,我已将其从SELECT和GROUP中删除,以便将查询缩小一点,以便找到错误。

最初,工作是按时间而非财政时间记录的。因此,查询中有一部分将工作时间框架连接到一个表,该表包含正常日历和财务日历。 在查询的那一点,我遇到了'扇出'的问题,这就是为什么我将单独的SELECT语句放在LEFT JOIN中。然而,在那时,所有价值(而不仅仅是现在/未来的价值)都显着过高。 子SELECT语句修复了这个问题,但仍然存在错误的值......

SELECT 
MSP_EpmResource_UserView.ResourceName,
totals.[FiscalMemberKeyPeriod] AS FiscalMonth,
SUM(MSP_EpmAssignmentByDay_UserView.AssignmentWork) AS Work,
SUM(MSP_EpmAssignmentByDay_UserView.AssignmentActualWork) AS ActualWork,
SUM(MSP_EpmAssignmentByDay_UserView.AssignmentRemainingWork) AS RemainingWork

FROM MSP_EpmResource_UserView 
     INNER JOIN ((MSP_EpmTask_UserView 
              INNER JOIN MSP_EpmProject_UserView 
          ON MSP_EpmTask_UserView.ProjectUID = MSP_EpmProject_UserView.ProjectUID) 

                  INNER JOIN MSP_EpmAssignment ON MSP_EpmTask_UserView.ProjectUID = MSP_EpmAssignment.ProjectUID 
          AND MSP_EpmTask_UserView.TaskUID = MSP_EpmAssignment.TaskUID) 

     ON MSP_EpmResource_UserView.ResourceUID = MSP_EpmAssignment.ResourceUID 
     INNER JOIN MSP_EpmAssignmentByDay_UserView 
     ON MSP_EpmAssignment.AssignmentUID = MSP_EpmAssignmentByDay_UserView.AssignmentUID 
    LEFT JOIN (SELECT MSP_TimeByDay_OlapView.CalendarMemberKeyMonth, MSP_TimeByDay_OlapView.FiscalMemberKeyPeriod, MSP_TimeByDay_OlapView.CalendarMemberKeyYear
FROM MSP_TimeByDay_OlapView
GROUP BY CalendarMemberKeyMonth, FiscalMemberKeyPeriod, CalendarMemberKeyYear)
AS totals
ON MONTH (MSP_EpmAssignmentByDay_UserView.TimeByDay) = totals.CalendarMemberKeyMonth

WHERE (MSP_EpmAssignmentByDay_UserView.TimeByDay BETWEEN '2016-01-01' AND '2016-12-31') 
AND totals.CalendarMemberKeyYear='2016'
GROUP BY

MSP_EpmResource_UserView.ResourceName,
totals.[FiscalMemberKeyPeriod]
ORDER BY
MSP_EpmResource_UserView.ResourceName

0 个答案:

没有答案