簡體   English   中英

使用sqlserver中的數據透視表轉換結果-查詢用戶在MS Project 2012上的最后30天的工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM