You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

60 lines
7.8 KiB

------------------------------------
--用途:得到实体对象的详细信息
--项目名称:
--说明:
--时间: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