使用T-SQL透视数据

时间:2015-06-25 15:00:33

标签: sql pivot

我想做的很简单,但我很挣扎。我希望有人可以提供帮助。

我有这个问题,我写过。

DECLARE     @LeadGenerator AS nvarchar(20) = 'Employee Name'

SELECT      C.BaseDate AS BaseDate
        ,COUNT(P.OwnCreatedDate) AS CreatedLeads
        ,COUNT(P2.OwnCreatedDate) AS CreatedResearchedLeads
        ,COUNT(P3.AppointmentFeatureDate) AS AppointmentsMade

FROM        dwCalendar C
        LEFT JOIN dwTable P ON P.OwnCreatedDate = C.BaseDate AND P.OwnerStatus NOT IN ('Researched') AND P.LeadAssignee = @LeadGenerator
        LEFT JOIN dwTable P2 ON P2.OwnCreatedDate = C.BaseDate AND P2.OwnerStatus IN ('Researched') AND P2.LeadAssignee = @LeadGenerator
        LEFT JOIN dwTable P3 ON P3.AppointmentFeatureDate = C.BaseDate AND P3.LeadAssignee = @LeadGenerator
WHERE       C.BaseDate BETWEEN DATEADD(DD, -8, GETDATE()) AND DATEADD(DD, -1, GETDATE())
GROUP BY    C.BaseDate

它以这种格式返回数据:

Basedate    | CreatedLeads | CreatedLeads | AppointmentsMade
2015-06-18  | 1            | 2            | 0  
2015-06-19  | 2            | 1            | 2
2015-06-20  | 1            | 1            | 1
2015-06-21  | 1            | 2            | 3
2015-06-22  | 2            | 0            | 0
2015-06-23  | 3            | 2            | 2
2015-06-24  | 0            | 0            | 1

我想转动数据,以便日期在顶部,然后,CreatedLeads,CreatedLeadsResearched和AppointmentsMade成为行的开始,然后是数据。

所以数据看起来更像是这样:

                          2015-06-18 | 2015-06-19 | 2015-06-20 | 2015-06-21
CreatedLeads           | Respective data in here
CreatedLeadsResearched |
AppointmentsMade       |

如果有人可以请求帮助,那就太好了,因为我被卡住了?

提前致谢,

感谢您的帮助,我尝试了脚本,这是sql:

DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)
DECLARE     @LeadGenerator AS nvarchar(20) = 'Employee Name'

SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName([BaseDate])
                    FROM dwCalendar FOR XML PATH('') ), 1, 1, '') 


SET @sqlquery = 'SELECT * FROM
  (

SELECT      C.BaseDate AS BaseDate
        ,COUNT(P.OwnCreatedDate) AS CreatedLeads
        ,COUNT(P2.OwnCreatedDate) AS CreatedResearchedLeads
        ,COUNT(P3.AppointmentFeatureDate) AS AppointmentsMade


FROM        dwCalendar C
        LEFT JOIN dwOwnerTouchPoints P ON P.OwnCreatedDate = C.BaseDate AND P.OwnerStatus NOT IN (''Researched'') AND P.LeadAssignee = @LeadGenerator
        LEFT JOIN dwTable P2 ON P2.OwnCreatedDate = C.BaseDate AND P2.OwnerStatus IN (''Researched'') AND P2.LeadAssignee = @LeadGenerator
        LEFT JOIN dwTable P3 ON P3.AppointmentFeatureDate = C.BaseDate AND P3.LeadAssignee = @LeadGenerator

WHERE       C.BaseDate BETWEEN DATEADD(DD, -8, GETDATE()) AND DATEADD(DD, -1, GETDATE())

GROUP BY    C.BaseDate ) base
   PIVOT (Sum(CreatedLeads) FOR [BaseDate]
   IN (' + @cols + ')) AS finalpivot'

EXECUTE ( @sqlquery )

然而,当我尝试这个时,我收到了这个错误:

Msg 137, Level 15, State 2, Line 11
Must declare the scalar variable "@LeadGenerator".
Msg 105, Level 15, State 1, Line 19
Unclosed quotation mark after the character string 'Apr 28 20)) AS 
finalpivot'.

真的很遗憾我只是不明白这里发生了什么。

0 个答案:

没有答案
相关问题