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

39 lines
2.2 KiB
MySQL
Raw Normal View History

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