Вычесть из суммы одного столбца в зависимости от дат в SQL - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть таблица SQL с именем ресурса, именем супервизора, запланированным усилием, запланированной датой завершения, именем задачи

Я хочу получить выходные данные имени ресурса, имени супервизора и запланированных усилий, когда плановые усилия равны сумме(Всего) усилий для этого вычитания ресурса (минус) из конечных дат планируемого усилия, которые заканчиваются в следующем месяце.

Ниже приведен пример:

  • РесурсОбщее усилие А составляет 125%
  • Выход для запланированного усилия А к 31.05.2008 г. должен составлять 50% ((50 + 25) - (25 + 25))

  • Ресурс B имеет общее усилие 100%

  • Выход для планового усилия B к 31.05.2008 должен составлять 50% (50-50)

Ниже приведен запрос, который я использую.Название ресурса, имя супервизора и планируемые усилия взяты из разных таблиц.Я использую Inner Join, чтобы объединить их.Текущая проблема, с которой я сталкиваюсь, состоит в том, что запрос должен выдавать выходные данные только для тех ресурсов, чья сумма запланированных усилий составляет менее 80% после указанной даты, включая все условия в предложении where.

Declare @MonthStart Date
Declare @MonthFinish Date
Set @MonthFinish = '5/31/2018'
Select
r.resourcename AS [Resource Name]
--,ru.[Supervisor Name]
--,t.taskname AS [Project Name]
,SUM(a.assignmentpeakunits) AS [Occupied %]
from assignment a
Inner Join Task t on a.TaskUID = t.taskuid
Inner Join Resource R on a.resourceuid = R.ResourceUId
Inner Join Resource_UserView RU on a.resourceuid = ru.resourceuid
Where a.projectuid = '04D0A859-CFE4-E611-8109-0025B52F0120'
and a.assignmentfinishdate > @MonthFinish
and r.ResourceName <> 'Unassigned Resource'
and a.AssignmentPeakUnits < 80 
Group By r.ResourceName
Order by r.ResourceName

1 Ответ

0 голосов
/ 25 апреля 2018

Кажется, вы думаете, что сложно. У вас есть эти строки для ресурса A:

planned_finish_date   planned_effort
2018-04-30            25%
2018-05-31            50%
2018-09-30            25%
2018-12-28            25%

Вы четко даете понять, что в общей сложности 125% и что в 2018-05-31 будет сделано 25 + 50 = 75%, поэтому остаются 25 + 25 = 50%, и эти 50% вы хотите показать. Но независимо от общего процента, независимо от того, сколько сделано, вы просто хотите получить сумму процентов после указанной даты.

select
  resource_name,
  supervisor_name,
  sum(planned_effort) as total
from mytable
where planned_finish_date >  date '2018-05-31'
group by resource_name, supervisor_name
order by resource_name, supervisor_name;

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

...