CREATE OR ALTER VIEW [dbo].[Prj_V_PersonnelManMonth] AS SELECT r.[Id], r.[TenantId], r.[IsDeleted], p.[Id] AS [ProjectId], p.[ProjectNo], p.[Name] AS [ProjectName], w.[Id] AS [WorkPackageId], w.[Code] AS [WorkPackageCode], w.[Name] AS [WorkPackageName], r.[Year], r.[Month], DATEFROMPARTS(r.[Year], r.[Month], 1) AS [PeriodDate], r.[UserId], r.[Rate] AS [ManMonthValue], CAST(ISNULL(u.[Rate], 100) AS decimal(18, 4)) AS [MonthlyRate], CAST(r.[Rate] * ISNULL(u.[Rate], 100) / 100.0 AS decimal(18, 4)) AS [EffectiveRate], CAST(ISNULL(pm.[AvgMonthlyCost], 0) AS decimal(18, 4)) AS [UnitCost], CAST(ISNULL(pm.[AvgMonthlyCost], 0) * r.[Rate] * ISNULL(u.[Rate], 100) / 10000.0 AS decimal(18, 4)) AS [TotalCost] FROM [dbo].[Prj_T_WorkPackageMonthRate] r INNER JOIN [dbo].[Prj_T_WorkPackage] w ON w.[Id] = r.[WorkPackageId] AND w.[IsDeleted] = 0 INNER JOIN [dbo].[Prj_T_Project] p ON p.[Id] = w.[ProjectId] AND p.[IsDeleted] = 0 LEFT JOIN [dbo].[Prj_T_UserMonthRate] u ON u.[UserId] = r.[UserId] AND u.[Year] = r.[Year] AND u.[Month] = r.[Month] AND (u.[TenantId] = r.[TenantId] OR (u.[TenantId] IS NULL AND r.[TenantId] IS NULL)) AND u.[IsDeleted] = 0 LEFT JOIN [dbo].[Prj_T_ProjectMember] pm ON pm.[ProjectId] = p.[Id] AND pm.[UserId] = r.[UserId] AND pm.[IsDeleted] = 0 GO