CREATE OR REPLACE VIEW public."Prj_V_ProjectCostSummary" AS SELECT (p."Id"::text || '-' || k."Kind")::varchar(64) AS "Id", p."TenantId", p."Id" AS "ProjectId", p."IsDeleted", k."Kind", k."SortNo", COALESCE(mm."ManMonth", 0)::numeric(18,4) AS "ManMonth", COALESCE(c."PersonnelCost", 0)::numeric(18,4) AS "PersonnelCost", COALESCE(c."TravelCost", 0)::numeric(18,4) AS "TravelCost", COALESCE(c."EquipmentCost", 0)::numeric(18,4) AS "EquipmentCost", COALESCE(c."ConsultingCost", 0)::numeric(18,4) AS "ConsultingCost", COALESCE(c."ServiceCost", 0)::numeric(18,4) AS "ServiceCost", COALESCE(c."MaterialCost", 0)::numeric(18,4) AS "MaterialCost", COALESCE(c."OtherCost", 0)::numeric(18,4) AS "OtherCost", COALESCE(c."TotalCost", 0)::numeric(18,4) AS "TotalCost" FROM public."Prj_T_Project" p CROSS JOIN (VALUES ('Planned', 1), ('Actual', 2)) AS k("Kind", "SortNo") LEFT JOIN LATERAL ( 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 public."Prj_T_WorkPackageResource" x INNER JOIN public."Prj_T_WorkPackage" w ON w."Id" = x."WorkPackageId" WHERE w."ProjectId" = p."Id" AND x."Kind" = k."Kind" AND x."IsDeleted" = FALSE AND w."IsDeleted" = FALSE ) c ON TRUE LEFT JOIN LATERAL ( SELECT SUM(r."Rate") / 100.0 AS "ManMonth" FROM public."Prj_T_WorkPackageMonthRate" r INNER JOIN public."Prj_T_WorkPackage" w ON w."Id" = r."WorkPackageId" WHERE w."ProjectId" = p."Id" AND r."IsDeleted" = FALSE AND w."IsDeleted" = FALSE ) mm ON TRUE;