SQL-结果值部分过高-语法问题?
我得到了一个资源计划查询,它应该显示当前财年每个资源的实际工时、剩余工时和总工时 然而,所有那些有剩余工作的行,即在当前的月份或未来的月份,但在过去的月份没有显示出太高的工作值 即2016年1月的所有数值(剩余、实际和总工作量)均正确。2016年2月至12月,所有数值均不正确 过高的值不会乘以相同的因子,并且所有错误的值都不会加上一个常量。 这就是为什么我怀疑可能有一些扇出问题(某些列乘以另一列或一个项出现的次数)是由大量联接引起的 我想知道这是一个语法问题还是我查询了错误的字段。如果您能告诉我,我的查询中是否存在导致总和聚合错误的内容,请告诉我:)SQL-结果值部分过高-语法问题?,sql,sql-server,syntax,syntax-error,project-server,Sql,Sql Server,Syntax,Syntax Error,Project Server,我得到了一个资源计划查询,它应该显示当前财年每个资源的实际工时、剩余工时和总工时 然而,所有那些有剩余工作的行,即在当前的月份或未来的月份,但在过去的月份没有显示出太高的工作值 即2016年1月的所有数值(剩余、实际和总工作量)均正确。2016年2月至12月,所有数值均不正确 过高的值不会乘以相同的因子,并且所有错误的值都不会加上一个常量。 这就是为什么我怀疑可能有一些扇出问题(某些列乘以另一列或一个项出现的次数)是由大量联接引起的 我想知道这是一个语法问题还是我查询了错误的字段。如果您能告诉我
需要注意的其他可能重要信息: 工作是从项目、工作分配和任务聚合而来的,因为查询也是为了显示这种详细程度而设计的。但是,为了查找错误,我已经从SELECT和GROUP中删除了这个选项,以缩小查询范围 最初,工作是按时间记录的,而不是按会计时间记录的。因此,查询中有一部分将工作时间框架连接到一个表,该表包含正常日历和会计日历。 在查询的那一点上,我遇到了一个“扇出”问题,这就是为什么我将单独的SELECT语句放在左连接中。然而,在当时,所有价值(不仅仅是当前/未来价值)都明显过高。 sub 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