【问题标题】:dynamic pivot table with duplicate column name具有重复列名的动态数据透视表
【发布时间】:2014-07-02 10:06:23
【问题描述】:

我有下表:

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

我需要输出如下:

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

我曾尝试使用动态透视来实现这一点,但由于 key1 是重复列而失败。

SQL错误: 为“p”多次指定了“key1”列。

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

【问题讨论】:

  • 我不认为这可以通过pivot来实现,但根据输出要求,可能还有其他解决方案。您需要使用结果创建一个新表还是只显示/打印/导出它?

标签: sql-server tsql dynamic-pivot


【解决方案1】:

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

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

【讨论】:

  • 要求选择结果表中的所有列。我知道这些列在数据透视表中必须是唯一的。您是否看到了一种方法(可能不是旋转)来获得我需要的结果。
  • @user3796907 发布带有问题的实际代码是一个非常好的主意
  • 对不起,如果我的问题不够清楚。但是我已经在问题本身中提到了我期望的输出。我目前唯一的代码在我发布的 sqlfiddle 中。也许我没有正确理解你的问题。能详细点吗?
  • clausen,我运行了您提供的查询,但我没有看到相同的结果。这里sqlfiddle.com/#!3/ad490/1
  • 当我在自己的服务器上尝试时,它显示了正确的结果,但 SQL Fiddle 由于某种原因省略了 key3。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
相关资源
最近更新 更多