CNCEC_SUBQHSE_WUHUAN/DataBase/版本日志/SUBQHSE_V2025-12-25-xiaj(sp...

118 lines
4.8 KiB
MySQL
Raw Normal View History

2025-12-25 19:05:33 +08:00
GO
/****** Object: StoredProcedure [dbo].[spInOutManHoursReport] Script Date: 2025-12-25 18:14:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[spInOutManHoursReport]
@projectId NVARCHAR(50),
@unitId NVARCHAR(max)= NULL,
@postId NVARCHAR(max)= NULL,
@startTime DATETIME = NULL,
@endTime DATETIME = NULL
AS
/*****************<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>****************/
SET NOCOUNT ON;
-- 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><E6B4A2><EFBFBD>˵ĵ<CBB5>λID
CREATE TABLE #FilteredUnits (UnitId NVARCHAR(50) PRIMARY KEY);
IF @unitId IS NOT NULL AND LTRIM(RTRIM(@unitId)) <> ''
BEGIN
INSERT INTO #FilteredUnits (UnitId)
select distinct items from split(@unitId,',')
END
-- 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><E6B4A2><EFBFBD>˵ĸ<CBB5>λID
CREATE TABLE #FilteredPosts (WorkPostId NVARCHAR(50) PRIMARY KEY);
IF @postId IS NOT NULL AND LTRIM(RTRIM(@postId)) <> ''
BEGIN
INSERT INTO #FilteredPosts (WorkPostId)
select distinct items from split(@postId,',')
END
;
-- 3. ʹ<><CAB9>CTEԤ<45>Ⱦۺ<C8BE><DBBA><EFBFBD>Աͳ<D4B1><CDB3><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>ѯ<EFBFBD><D1AF>
WITH InOutRecord AS (
SELECT T.ProjectId,P.UnitId,P.WorkPostId as PostId,ManHours
,ISNULL((case when P.UnitId=''then null else (case when u.ShortUnitName IS NOT NULL THEN u.ShortUnitName ELSE u.UnitName END) end),'δ֪') AS UnitName
,ISNULL((case when P.UnitId=''then null else u.UnitName end),'δ֪') AS AllUnitName
,ISNULL((case when W.WorkPostName=''then null else W.WorkPostName end),'δ֪') AS PostName
,T.NewID,U.ShortUnitName
FROM dbo.t_d_EmployInOutRecord AS T WITH(NOLOCK)
LEFT JOIN dbo.SitePerson_Person AS P WITH(NOLOCK) ON T.ProjectId=P.ProjectId AND T.IDCardNo=P.IdentityCard
LEFT JOIN dbo.Base_Unit AS U WITH(NOLOCK) ON P.UnitId=U.UnitId
LEFT JOIN dbo.Base_WorkPost AS W WITH(NOLOCK) ON P.WorkPostId=W.WorkPostId
WHERE 1=1 AND T.ProjectId = @ProjectId
AND (@startTime IS NULL OR T.RecordDate >= @startTime)
AND (@endTime IS NULL OR T.RecordDate <= @endTime)
AND (@unitId IS NULL OR EXISTS (SELECT 1 FROM #FilteredUnits WHERE UnitId = P.UnitId))
AND (@postId IS NULL OR EXISTS (SELECT 1 FROM #FilteredPosts WHERE WorkPostId = P.WorkPostId))
),
PerCountSum AS (
SELECT COUNT(PersonId) AS PersonCountSum,ProjectId,UnitId,WorkPostId
FROM dbo.SitePerson_Person AS SP WITH(NOLOCK)
WHERE IsUsed=1 AND OutTime IS NOT NULL AND ProjectId = @ProjectId
AND (@unitId IS NULL OR EXISTS (SELECT 1 FROM #FilteredUnits WHERE UnitId = SP.UnitId))
AND (@postId IS NULL OR EXISTS (SELECT 1 FROM #FilteredPosts WHERE WorkPostId = SP.WorkPostId))
GROUP BY ProjectId,UnitId,WorkPostId
)
-- 4. <20><><EFBFBD><EFBFBD>ѯ - <20>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>JOIN<49>
SELECT CAST(NEWID() AS NVARCHAR(100)) AS ID,InOutRecord.ProjectId,InOutRecord.UnitId,InOutRecord.UnitName,InOutRecord.AllUnitName,InOutRecord.PostName
,SUM(ISNULL(InOutRecord.ManHours, 0)) AS ManHoursSum
,COUNT(InOutRecord.NewID) AS ManCountSum ,PerCountSum.PersonCountSum
FROM InOutRecord
LEFT JOIN PerCountSum ON PerCountSum.UnitId=InOutRecord.UnitId AND PerCountSum.WorkPostId=InOutRecord.PostId AND PerCountSum.ProjectId=InOutRecord.ProjectId
GROUP BY InOutRecord.ProjectId,InOutRecord.UnitId,InOutRecord.UnitName,InOutRecord.AllUnitName,InOutRecord.PostId,InOutRecord.PostName,PerCountSum.PersonCountSum
ORDER BY ISNULL(InOutRecord.UnitName, InOutRecord.AllUnitName),InOutRecord.PostName
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
DROP TABLE #FilteredUnits;
DROP TABLE #FilteredPosts;
--2025-12-25<EFBFBD>޸<EFBFBD>֮ǰ xiaj
--SELECT CAST(NEWID() AS NVARCHAR(100)) AS ID
-- ,T.ProjectId
-- ,p.UnitId
-- ,ISNULL((case when P.UnitId=''then null
-- else (case when u.ShortUnitName IS NOT NULL THEN u.ShortUnitName ELSE u.UnitName END) end),'δ֪') AS UnitName
-- ,ISNULL((case when P.UnitId=''then null
-- else u.UnitName end),'δ֪') AS AllUnitName
-- ,p.WorkPostId as PostId
-- ,ISNULL((case when W.WorkPostName=''then null else W.WorkPostName end),'δ֪') AS PostName
-- ,SUM(ISNULL(ManHours,0)) AS ManHoursSum
-- ,COUNT(T.NewID) AS ManCountSum
-- ,(SELECT COUNT(PersonId) FROM SitePerson_Person
-- WHERE ProjectId = T.ProjectId AND P.UnitId=UnitId AND P.WorkPostId=WorkPostId AND IsUsed=1 AND OutTime IS NOT NULL
-- group by ProjectId,UnitId,WorkPostId) AS PersonCountSum
--FROM dbo.t_d_EmployInOutRecord AS T
--LEFT JOIN dbo.SitePerson_Person AS P ON T.ProjectId=P.ProjectId AND T.IDCardNo=P.IdentityCard
--LEFT JOIN dbo.Base_Unit AS U ON P.UnitId=U.UnitId
----LEFT JOIN dbo.ProjectData_TeamGroup AS Team ON P.TeamGroupId=Team.TeamGroupId
--LEFT JOIN dbo.Base_WorkPost AS W ON P.WorkPostId=W.WorkPostId
--WHERE T.ProjectId = @ProjectId
--AND (RecordDate >= @startTime OR @startTime IS NULL)
--AND (RecordDate <= @endTime OR @endTime IS NULL)
--AND (@unitId like '%'+P.UnitId+'%' OR @unitId IS NULL)
--AND (@postId like '%'+P.WorkPostId+'%' OR @postId IS NULL)
--GROUP BY T.ProjectId,P.UnitId,U.UnitName,u.ShortUnitName,P.WorkPostId,W.WorkPostName
GO