[英]convert results using pivot in sqlserver - querying the last 30 days of work of a user on MS Project 2012
我正在嘗試創建一個查詢,該查詢將顯示用戶在MS Project 2012上報告的工作情況。
我有這個查詢:
從中選擇名稱,數據,工作
select
r.ResourceName Nome,
convert(varchar(10), ad.TimeByDay, 103) data,
sum(ad.AssignmentActualWork) Work
FROM
dbo.MSP_EpmAssignmentByDay ad,
dbo.msp_epmassignment a,
dbo.msp_epmresource r,
dbo.msp_epmtask t
WHERE
a.TaskUID = t.taskuid
AND a.assignmentuid = ad.assignmentuid
AND a.ResourceOwnerUID = r.ResourceUID
AND ad.timebyday >= convert(varchar(10), '01/05/14', 103)
AND ad.timebyday <= convert(varchar(10), '31/05/14', 103)
group by r.ResourceName,ad.TimeByDay
) t
This query print this result:
Name Date Sum(work)
Frederico 01/05/2014 0.000000
Frederico 02/05/2014 8.000000
Frederico ... 0.000000
Frederico 31/05/2014 8.000000
Other user 01/05/2014 3.000000
我需要以下結果:
Name | 01/05/14 | 02/05/14 | ... | 31/05/14 |
Frederico 0.0 8.0 0.0 0.0
Other user 3.0 0.0 0.0 0.0
謝謝大家!
啊! 我知道了 !
而已:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
set @cols = STUFF((SELECT ',' + QUOTENAME(convert(varchar(10), ad.TimeByDay, 103))
from dbo.MSP_EpmAssignmentByDay ad
WHERE
ad.timebyday >= convert(varchar(10), '01/05/14', 103)
AND ad.timebyday <= convert(varchar(10), '31/05/14', 103)
group by ad.TimeByDay
order by ad.TimeByDay asc
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT Nome, ' + @cols + '
FROM
(
SELECT
r.ResourceName Nome,
convert(varchar(10), ad.TimeByDay, 103) data,
sum(ad.AssignmentActualWork) Work
FROM
dbo.MSP_EpmAssignmentByDay ad,
dbo.msp_epmassignment a,
dbo.msp_epmresource r,
dbo.msp_epmtask t
WHERE
1=1
AND a.TaskUID = t.taskuid
AND a.assignmentuid = ad.assignmentuid
AND a.ResourceOwnerUID = r.ResourceUID
AND ad.timebyday >= convert(varchar(10), ''01/05/14'', 103)
AND ad.timebyday <= convert(varchar(10), ''31/05/14'', 103)
group by r.ResourceName,ad.TimeByDay
) t
PIVOT
( SUM([work])
FOR data IN ('+ @cols +')
) pvt;
'
execute(@query)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.