Перед тем, как присоединиться к таблицам, вам нужно сделать декартово произведение для всех месяцев и пользователей.
ALTER PROCEDURE [dbo].[SP_UserTC_BY__ProfID_FuncID]
@P_ProfileName nvarchar(50)
--SET @P_FunctionID = 1
AS
IF @P_ProfileName is null
RAISERROR('Null values not allowed for @P_ProfileName', 16,1);
BEGIN
WITH cteUsers AS(
SELECT *
FROM TBL_User as users
CROSS JOIN (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12))x(Month) /*this can be changed to names if needed*/
)
SELECT users.UserID,
salesobj.Month,
users.Name,
prof.ProfileName,
funct.Name as FunctionName,
salesobj.SalesObjectiveMonth,
salesobj.GrossMargin,
salesobj.ReductionWorkingTime,
salesobj.ConversionRate,
salesobj.ReductionOnPace
FROM cteUsers as users
join REL_ProfileUser as relprofileuser on users.UserID = relprofileuser.UserID
join TBL_Profile as prof on prof.ProfileID = relprofileuser.ProfileID
join TBL_UserFunction as funct on funct.FunctionID = relprofileuser.FunctionID
LEFT JOIN TBL_SalesObjective as salesobj on salesobj.UserID = users.UserID
and salesobj.Month = users.Month
WHERE prof.ProfileName = @P_ProfileName
and users.IsActive = 1;
END;