ALTER PROC [dbo].[spInOutManHoursReport] @projectId NVARCHAR(50), @unitId NVARCHAR(max)= NULL, @postId NVARCHAR(max)= NULL, @startTime DATETIME = NULL, @endTime DATETIME = NULL AS /*****************单位考勤****************/ SELECT CAST(NEWID() AS NVARCHAR(100)) AS ID ,P.ProjectId ,p.UnitId ,ISNULL((case when u.UnitName=''then null else u.UnitName end),'未知') AS UnitName ,p.WorkPostId as PostId ,ISNULL((case when W.WorkPostName=''then null else W.WorkPostName end),'未知') AS PostName ,SUM(ISNULL(ManHours,0)) AS ManHoursSum ,COUNT( distinct IDCardNo) AS ManCountSum ,COUNT( distinct PersonId) AS PersonCountSum FROM dbo.SitePerson_Person AS P LEFT JOIN ( select ProjectId,IDCardNo,SUM(ISNULL(ManHours,0)) ManHours from t_d_EmployInOutRecord where ( RecordDate >= @startTime OR @startTime IS NULL) AND ( RecordDate <= @endTime OR @endTime IS NULL) group by ProjectId,IDCardNo) T ON P.ProjectId=T.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 P.ProjectId = @ProjectId and P.InTime <=GETDATE() and ( P.OutTime is null or P.OutTime > GETDATE()) AND (@unitId like '%'+P.UnitId+'%' OR @unitId IS NULL) AND (@postId like '%'+P.WorkPostId+'%' OR @postId IS NULL) GROUP BY P.ProjectId,P.UnitId,U.UnitName,P.WorkPostId,W.WorkPostName