CREATE OR ALTER VIEW [dbo].[Prj_V_ProjectCostSummary] AS SELECT CAST(CONCAT(CAST(p.[Id] AS nvarchar(36)), '-', k.[Kind]) AS nvarchar(64)) AS [Id], p.[TenantId], p.[Id] AS [ProjectId], p.[IsDeleted], k.[Kind], k.[SortNo], CAST(ISNULL(mm.[ManMonth], 0) AS decimal(18, 4)) AS [ManMonth], CAST(ISNULL(c.[PersonnelCost], 0) AS decimal(18, 4)) AS [PersonnelCost], CAST(ISNULL(c.[TravelCost], 0) AS decimal(18, 4)) AS [TravelCost], CAST(ISNULL(c.[EquipmentCost], 0) AS decimal(18, 4)) AS [EquipmentCost], CAST(ISNULL(c.[ConsultingCost], 0) AS decimal(18, 4)) AS [ConsultingCost], CAST(ISNULL(c.[ServiceCost], 0) AS decimal(18, 4)) AS [ServiceCost], CAST(ISNULL(c.[MaterialCost], 0) AS decimal(18, 4)) AS [MaterialCost], CAST(ISNULL(c.[OtherCost], 0) AS decimal(18, 4)) AS [OtherCost], CAST(ISNULL(c.[TotalCost], 0) AS decimal(18, 4)) AS [TotalCost] FROM [dbo].[Prj_T_Project] p CROSS JOIN (VALUES ('Planned', 1), ('Actual', 2)) AS k([Kind], [SortNo]) OUTER APPLY ( SELECT SUM(CASE WHEN x.[ResourceType] = 'Personnel' THEN x.[Cost] ELSE 0 END) AS [PersonnelCost], SUM(CASE WHEN x.[ResourceType] = 'Travel' THEN x.[Cost] ELSE 0 END) AS [TravelCost], SUM(CASE WHEN x.[ResourceType] = 'Equipment' THEN x.[Cost] ELSE 0 END) AS [EquipmentCost], SUM(CASE WHEN x.[ResourceType] = 'Consulting' THEN x.[Cost] ELSE 0 END) AS [ConsultingCost], SUM(CASE WHEN x.[ResourceType] = 'Service' THEN x.[Cost] ELSE 0 END) AS [ServiceCost], SUM(CASE WHEN x.[ResourceType] = 'Material' THEN x.[Cost] ELSE 0 END) AS [MaterialCost], SUM(CASE WHEN x.[ResourceType] = 'Other' THEN x.[Cost] ELSE 0 END) AS [OtherCost], SUM(x.[Cost]) AS [TotalCost] FROM [dbo].[Prj_T_WorkPackageResource] x INNER JOIN [dbo].[Prj_T_WorkPackage] w ON w.[Id] = x.[WorkPackageId] WHERE w.[ProjectId] = p.[Id] AND x.[Kind] = k.[Kind] AND x.[IsDeleted] = 0 AND w.[IsDeleted] = 0 ) c OUTER APPLY ( SELECT SUM(r.[Rate]) / 100.0 AS [ManMonth] FROM [dbo].[Prj_T_WorkPackageMonthRate] r INNER JOIN [dbo].[Prj_T_WorkPackage] w ON w.[Id] = r.[WorkPackageId] WHERE w.[ProjectId] = p.[Id] AND r.[IsDeleted] = 0 AND w.[IsDeleted] = 0 ) mm GO