sozsoft-platform/configs/seeds/postgres/object/Prj_V_ProjectCostSummary.sql

38 lines
2.1 KiB
MySQL
Raw Normal View History

2026-10-08 10:51:14 +00:00
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;