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

  1. ------------------------------------
  2. --(u_0R[SO[av~Oo`
  3. --yv Ty
  4. --f
  5. --e2014/7/9 NHS 07:05:11
  6. ------------------------------------
  7. ALTER PROCEDURE [dbo].[OSP_OTB_Rpt_GetPrjWorkhoursRpt]
  8. @ProjectNumber varchar(50),
  9. @MemberID varchar(max),
  10. @OrganizationID varchar(50),
  11. @DateStart varchar(50),
  12. @DateEnd varchar(50)
  13. AS
  14. declare @Allsql varchar(max),@str VARCHAR(MAX),@sql2 varchar(max)
  15. --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<>''
  16. --) aa LEFT JOIN dbo.OTB_SYS_Arguments Arg ON aa.Worktype=Arg.ArgumentID AND aa.OrganizationID = Arg.OrganizationID AND ArgumentClassID='DayWorkTP' ORDER BY OrderByValue
  17. -- FOR XML PATH(''))
  18. 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<>''
  19. ) aa LEFT JOIN dbo.OTB_SYS_Arguments Arg ON aa.Worktype=Arg.ArgumentID AND aa.OrganizationID = Arg.OrganizationID AND ArgumentClassID='DayWorkTP' ORDER BY OrderByValue
  20. FOR XML PATH(''))
  21. PRINT @str
  22. SET @str=REPLACE(@str+',',',,','')
  23. SET @sql2=')a pivot (sum(a.WorkHours) for Worktype in ('+@str+')) b '
  24. SET @Allsql='
  25. SELECT ''^_,NT T1z,\Hh T1z,'+@str+',P;'' as HeaderName
  26. SELECT ROW_NUMBER() OVER(Order BY RIGHT(NT T1z,LEN(NT T1z)-CHARINDEX('''',NT T1z))) AS ''^_'',*,'''' as ''P;'' FROM (
  27. SELECT dbo.OFN_SYS_MemberNameByMemberID(CreateUser,OrganizationID)+''''+CreateUser+'' '' AS NT T1z, (case ISNULL(ProjectNumber,'''') when '''' then ''0vQN0(^\Hh)'' else dbo.OFN_SYS_ProjectNameByProjectNumber(ProjectNumber) end ) as ''\Hh T1z'',
  28. dbo.OFN_SYS_ArgumentValueByArgumentID(Worktype,''DayWorkTP'') AS Worktype,
  29. cast(round(datediff( MINUTE, StartDate, EndDate )/60.00,2) as numeric(20,2)) AS WorkHours
  30. 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+''' '
  31. --cast((datediff( MINUTE, StartDate, EndDate )/60.0) as decimal(10, 2)) AS WorkHours
  32. SET @Allsql=@Allsql+@sql2
  33. PRINT @Allsql
  34. EXEC (@Allsql)
  35. --SELECT '�^_�','�N�T T1z','\Hh T1z','\Hh�]Bf','�P;�'
  36. -- SELECT
  37. -- ROW_NUMBER() OVER (ORDER BY prj.ProjectCName) AS ^_
  38. -- ,(SELECT MemberName FROM dbo.OVW_MemberAndSupplyUser WHERE OrganizationID=MIN(dw.OrganizationID) AND MemberID=MIN(dw.CreateUser)) AS NT T1z
  39. -- ,ISNULL(prj.ProjectCName,N'0vQ�N0(^�\Hh)') AS \Hh T1z
  40. -- ,SUM(datediff( hour, StartDate, EndDate )) AS \Hh]Bf
  41. -- ,N'' AS P;
  42. -- FROM OTB_MNG_DayWork AS dw
  43. -- LEFT JOIN dbo.OTB_PRJ_ProjectInfo AS prj ON dw.OrganizationID = prj.OrganizationID AND dw.ProjectNumber = prj.ProjectNumber
  44. -- --WHERE UserID='christy.li'
  45. -- WHERE
  46. -- (CHARINDEX(dw.ProjectNumber,@ProjectNumber)>0 OR @ProjectNumber='')
  47. -- AND (CHARINDEX(dw.CreateUser,@MemberID)>0 OR @MemberID='')
  48. -- AND (dw.StartDate>=@DateStart OR @DateStart='')
  49. -- AND (dw.EndDate<=@DateEnd OR @DateEnd='')
  50. -- AND dw.OrganizationID=@OrganizationID
  51. -- GROUP BY prj.ProjectCName