具有重复列名称的动态数据透视表

时间:2014-07-02 10:06:23

标签: sql-server tsql dynamic-pivot

我有下表:

Name       |       Value
---------------------------
key1       |       val1
key2       |       val2
key1       |       val3
key4       |       val4
.          |       .
.          |       .
.          |       .
.          |       .

我需要输出如下:

key1       |    key2       |    key1       |    key4      |    ......
-----------------------------------------------------------------------------
val1       |    val2       |    val3       |    val4      |    ...... 

我尝试使用动态数据透视实现此功能,但由于key1是重复列而失败,因此失败了。

的SQLError: 'p'多次指定了'key1'列。

我使用的Pivot查询: http://sqlfiddle.com/#!3/33f66/4

1 个答案:

答案 0 :(得分:0)

使用数据透视表可能无法实现,因为列名相同。这是另一种解决方案:

DECLARE @sql AS NVARCHAR(MAX)

SELECT @sql = STUFF((SELECT ',''' + value + ''' as ' + QUOTENAME(Name)
                    from mytable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

EXEC ('select '+ @sql)

结果:

key1    key2    key1    key4
val1    val2    val3    val4