------------------------------------ --用途:得到实体对象的详细信息 --项目名称: --说明: --时间:2014/7/9 下午 07:05:11 ------------------------------------ ALTER PROCEDURE [dbo].[OSP_OTB_Rpt_GetPrjWorkhoursRpt] @ProjectNumber varchar(50), @MemberID varchar(max), @OrganizationID varchar(50), @DateStart varchar(50), @DateEnd varchar(50) AS declare @Allsql varchar(max),@str VARCHAR(MAX),@sql2 varchar(max) --SET @str=(SELECT ArgumentValue+',' FROM (SELECT DISTINCT Worktype ,OrganizationID FROM dbo.OTB_MNG_DayWork WHERE (CHARINDEX(ProjectNumber,@ProjectNumber)>0 OR @ProjectNumber='') AND (CHARINDEX(CreateUser,@MemberID)>0 OR @MemberID='') AND (StartDate>=@DateStart OR @DateStart='') AND (EndDate<=@DateEnd OR @DateEnd='') AND OrganizationID=@OrganizationID AND ProjectNumber<>'' AND Worktype<>'' --) aa LEFT JOIN dbo.OTB_SYS_Arguments Arg ON aa.Worktype=Arg.ArgumentID AND aa.OrganizationID = Arg.OrganizationID AND ArgumentClassID='DayWorkTP' ORDER BY OrderByValue -- FOR XML PATH('')) SET @str=(SELECT ArgumentValue+',' FROM (SELECT DISTINCT Worktype ,OrganizationID FROM dbo.OTB_MNG_DayWork WHERE (CHARINDEX(ProjectNumber,@ProjectNumber)>0 OR @ProjectNumber='') AND (CHARINDEX(CreateUser,@MemberID)>0 OR @MemberID='') AND (StartDate>=@DateStart OR @DateStart='') AND (EndDate<=@DateEnd OR @DateEnd='') AND OrganizationID=@OrganizationID --AND ProjectNumber<>'' AND Worktype<>'' ) aa LEFT JOIN dbo.OTB_SYS_Arguments Arg ON aa.Worktype=Arg.ArgumentID AND aa.OrganizationID = Arg.OrganizationID AND ArgumentClassID='DayWorkTP' ORDER BY OrderByValue FOR XML PATH('')) PRINT @str SET @str=REPLACE(@str+',',',,','') SET @sql2=')a pivot (sum(a.WorkHours) for Worktype in ('+@str+')) b ' SET @Allsql=' SELECT ''序號,人員名稱,專案名稱,'+@str+',備註'' as HeaderName SELECT ROW_NUMBER() OVER(Order BY RIGHT(人員名稱,LEN(人員名稱)-CHARINDEX(''('',人員名稱))) AS ''序號'',*,'''' as ''備註'' FROM ( SELECT dbo.OFN_SYS_MemberNameByMemberID(CreateUser,OrganizationID)+''(''+CreateUser+'')'' AS 人員名稱, (case ISNULL(ProjectNumber,'''') when '''' then ''【其他】(非專案)'' else dbo.OFN_SYS_ProjectNameByProjectNumber(ProjectNumber) end ) as ''專案名稱'', dbo.OFN_SYS_ArgumentValueByArgumentID(Worktype,''DayWorkTP'') AS Worktype, cast(round(datediff( MINUTE, StartDate, EndDate )/60.00,2) as numeric(20,2)) AS WorkHours FROM dbo.OTB_MNG_DayWork WHERE (CHARINDEX(ProjectNumber,'''+@ProjectNumber+''')>0 OR '''+@ProjectNumber+'''='''') AND (CHARINDEX(CreateUser,'''+@MemberID+''')>0 OR '''+@MemberID+'''='''') AND (StartDate>='''+@DateStart+''' OR '''+@DateStart+'''='''') AND (EndDate<='''+@DateEnd+''' OR '''+@DateEnd+'''='''') AND OrganizationID='''+@OrganizationID+''' ' --cast((datediff( MINUTE, StartDate, EndDate )/60.0) as decimal(10, 2)) AS WorkHours SET @Allsql=@Allsql+@sql2 PRINT @Allsql EXEC (@Allsql) --SELECT '序號','人員名稱','專案名稱','專案工時','備註' -- SELECT -- ROW_NUMBER() OVER (ORDER BY prj.ProjectCName) AS 序號 -- ,(SELECT MemberName FROM dbo.OVW_MemberAndSupplyUser WHERE OrganizationID=MIN(dw.OrganizationID) AND MemberID=MIN(dw.CreateUser)) AS 人員名稱 -- ,ISNULL(prj.ProjectCName,N'【其他】(非專案)') AS 專案名稱 -- ,SUM(datediff( hour, StartDate, EndDate )) AS 專案工時 -- ,N'' AS 備註 -- FROM OTB_MNG_DayWork AS dw -- LEFT JOIN dbo.OTB_PRJ_ProjectInfo AS prj ON dw.OrganizationID = prj.OrganizationID AND dw.ProjectNumber = prj.ProjectNumber -- --WHERE UserID='christy.li' -- WHERE -- (CHARINDEX(dw.ProjectNumber,@ProjectNumber)>0 OR @ProjectNumber='') -- AND (CHARINDEX(dw.CreateUser,@MemberID)>0 OR @MemberID='') -- AND (dw.StartDate>=@DateStart OR @DateStart='') -- AND (dw.EndDate<=@DateEnd OR @DateEnd='') -- AND dw.OrganizationID=@OrganizationID -- GROUP BY prj.ProjectCName