使用Pivot将行转换为列

时间:2014-05-11 13:48:21

标签: sql-server-2008

我的表格数据:

Empcode Empname  COmpany   Department Question                    Scale
1001    ABC       Comp1     IT        Development Opportunities    50
1001    ABC       Comp1     IT        Goals and Targets Set        30
1001    ABC       Comp1     IT        Feedback and Coaching        10
1002    XYZ       Comp1     IT        Goals and Targets Set        60
1002    XYZ       Comp1     IT        Feedback and Coaching        70

查询我尝试的内容:

DECLARE @cols AS NVARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)

SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME(Question) 
                from TmpTest1
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

set @query = 'SELECT Empcode,Empname,Company,Department,' + @cols + '
        from 
        (
            select *
            from TmpTest1
        ) x
        pivot 
        (
           max(scale)
           for Question in (' + @cols + ')
        ) p '

execute(@query)

它正在运作,但我不想使用execute(@query)。 我想要一个内联查询。

1 个答案:

答案 0 :(得分:0)

您应该仅将PIVOT与精确的结果字段列表一起使用。 (据我所知,PIVOT没有动态版本)

如果您有动态字段列表,则必须使用动态查询。

如果您不想使用EXEC,可以使用 sp_executesql ,但查询应该是动态的。