Поскольку у вас есть только один набор группировок, запрос можно упростить до следующего:
select p.ProjectId,
count(t.TaskId) as Total_Tasks,
count(case when t.taskowner != 'Unassigned' then 1 end) as Assigned_Tasks,
count(case when t.TaskStatusId in (400, 500) then 1 end) as Completed_Tasks,
count(case when t.TaskStatusId not in (400, 500) then 1 end) as Remaining_Tasks,
count(case when t.DueDate < getutcdate() and t.TaskStatusId not in (400, 500) then 1 end) as Late_Tasks
from project p with (nolock)
left join dbo.Task t on t.PrimarySearchEntityId = p.ProjectId and t.IsDeleted = 0
group by p.ProjectId
Если у вас есть несколько таблиц, по которым вы группируете, вам придется перейти к подзапросу, как и в другом ответе, хотя нет никакой причины использовать перекрестное применение к левому соединению.
select p.ProjectId, Total_Tasks, Assigned_Tasks, Completed_Tasks, Remaining_Tasks, Late_Tasks
from project p
left join (
select
PrimarySearchEntityId,
count(TaskId) as Total_Tasks,
count(case when taskowner != 'Unassigned' then 1 end) as Assigned_Tasks,
count(case when skStatusId in (400, 500) then 1 end) as Completed_Tasks,
count(case when t.TaskStatusId not in (400, 500) then 1 end) as Remaining_Tasks,
count(case when DueDate < getutcdate() and TaskStatusId not in (400, 500) then 1 end) as Late_Tasks
from dbo.Task
where IsDeleted=0
group by PrimarySearchEntityId
) t on t.PrimarySearchEntityId = p.ProjectId