SQL - частично слишком высокие значения, как результат - синтаксическая проблема?

У меня есть запрос планирования ресурсов, который должен показывать фактическую работу, оставшуюся работу и общую работу на ресурс за финансовый месяц за текущий год.

Однако во всех этих строках, где есть оставшаяся работа - т.е. в текущем месяце или в будущем месяце, но не в прошлом месяце, - показаны слишком высокие значения для работы.

Т.е. на январь 2016 года все значения (оставшиеся, фактические и итоговые работы) являются правильными. С февраля по декабрь 2016 года ни одно из значений не является правильным.

Слишком высокие значения не умножаются на один и тот же коэффициент, и ко всем ошибочным значениям не добавляется постоянное число. Вот почему я подозреваю, что может быть какая-то проблема разветвления (умножение столбца на другой или количество раз, когда один элемент появляется), вызванный многочисленными объединениями.

Мне интересно, является ли это проблемой синтаксиса или я запрашиваю неправильные поля. Если бы вы могли сказать мне, есть ли что-то в моем запросе, что вызывает сбой суммирования сумм, было бы здорово, если бы вы могли сообщить мне:)


Далее, возможно, важная информация, чтобы отметить:

Работа агрегируется из проектов, заданий и задач, так как запрос предназначен для показа этого уровня детализации. Однако я удалил это из SELECT и GROUP, чтобы немного сузить запрос с целью обнаружения ошибки.

Первоначально работа записывается во времени, а не в бюджетное время. Поэтому в запросе есть часть, соединяющая график рабочего времени с таблицей, которая содержит как нормальный, так и финансовый календарь. В этот момент запроса у меня возникла проблема "разветвления", поэтому я поместил отдельный оператор SELECT в LEFT JOIN. Однако тогда все значения (а не только текущие / будущие значения) были значительно выше. Оператор 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

0 ответов

Другие вопросы по тегам