Разделить результат запроса на результат другого запроса - PullRequest
2 голосов
/ 07 февраля 2012

У меня есть запрос SQL-Sever, который возвращает емкость, доступную человеку в любой конкретный день. Результат возвращается для каждого задания, запланированного человеком в этот конкретный день.

Моя проблема в том, что он возвращает общую емкость за этот день в каждой строке результата запроса. Поэтому, когда вы показываете все результаты за один день для одного человека, в связанной сводной таблице в Excel (например), вы получаете количество записей, умноженное на базовую емкость.

Я написал другой запрос, который подсчитывает количество назначений в день на человека.

Я хотел бы разделить Capacity из первого запроса на количество записей, возвращаемых вторым запросом, но не знаю, как объединить запросы.

Это запрос, который возвращает список назначений по дням с емкостью:

SELECT 
  MSP_EpmAssignmentByDay.TimeByDay, 
  MSP_EpmAssignment.ResourceUID, 
  MSP_EpmAssignmentByDay.AssignmentActualWork, 
  MSP_EpmResourceByDay_UserView.Capacity
FROM 
  MSP_EpmAssignment MSP_EpmAssignment,      
  MSP_EpmAssignmentByDay MSP_EpmAssignmentByDay,
  MSP_EpmResourceByDay_UserView
  MSP_EpmResourceByDay_UserView
WHERE   
  MSP_EpmAssignmentByDay.AssignmentUID = MSP_EpmAssignment.AssignmentUID 
  AND MSP_EpmResourceByDay_UserView.TimeByDay = MSP_EpmAssignmentByDay.TimeByDay

Это запрос, который возвращает количество назначений в день на человека:

SELECT 
  count(TimeByDay) as DayCount 
FROM 
  MSP_EpmAssignmentByDay_UserView 
  LEFT JOIN MSP_EpmAssignment_UserView
  ON MSP_EpmAssignmentByDay_UserView.AssignmentUID =
     MSP_EpmAssignment_UserView.AssignmentUID
GROUP BY ResourceUID, TimeByDay 

Любая помощь будет принята с благодарностью.

Спасибо

1 Ответ

1 голос
/ 07 февраля 2012

Предполагая, что вам нужны только те поля, которые включены в запрос, попробуйте:

SELECT 
  MSP_EpmAssignmentByDay.TimeByDay, 
  MSP_EpmAssignment.ResourceUID, 
  SUM(MSP_EpmAssignmentByDay.AssignmentActualWork) TotalWork, 
  MAX(MSP_EpmResourceByDay_UserView.Capacity) Capacity
FROM 
  MSP_EpmAssignment,      
  MSP_EpmAssignmentByDay,
  MSP_EpmResourceByDay_UserView
WHERE   
  MSP_EpmAssignmentByDay.AssignmentUID = MSP_EpmAssignment.AssignmentUID 
  AND MSP_EpmResourceByDay_UserView.TimeByDay = MSP_EpmAssignmentByDay.TimeByDay
GROUP BY
  MSP_EpmAssignmentByDay.TimeByDay, 
  MSP_EpmAssignment.ResourceUID

В качестве альтернативы попробуйте изменить сводную операцию для Capacity в сводной таблице на MAX вместо SUM.

РЕДАКТИРОВАТЬ: Чтобы включить количество записей для того же ResourceUID и TimeByDay в детали, попробуйте:

SELECT 
  MSP_EpmAssignmentByDay.TimeByDay, 
  MSP_EpmAssignment.ResourceUID, 
  MSP_EpmAssignmentByDay.AssignmentActualWork, 
  MSP_EpmResourceByDay_UserView.Capacity,
  count(*) over (partition by MSP_EpmAssignmentByDay.TimeByDay,
                              MSP_EpmAssignment.ResourceUID) DayCount
FROM 
  MSP_EpmAssignment MSP_EpmAssignment,      
  MSP_EpmAssignmentByDay MSP_EpmAssignmentByDay,
  MSP_EpmResourceByDay_UserView
  MSP_EpmResourceByDay_UserView
WHERE   
  MSP_EpmAssignmentByDay.AssignmentUID = MSP_EpmAssignment.AssignmentUID 
  AND MSP_EpmResourceByDay_UserView.TimeByDay = MSP_EpmAssignmentByDay.TimeByDay
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...