Sql server 具有重复列名的动态透视表
我有下表:Sql server 具有重复列名的动态透视表,sql-server,tsql,dynamic-pivot,Sql Server,Tsql,Dynamic Pivot,我有下表: Name | Value --------------------------- key1 | val1 key2 | val2 key1 | val3 key4 | val4 . | . . | . . | . . | . 我需要输出如下: k
Name | Value
---------------------------
key1 | val1
key2 | val2
key1 | val3
key4 | val4
. | .
. | .
. | .
. | .
我需要输出如下:
key1 | key2 | key1 | key4 | ......
-----------------------------------------------------------------------------
val1 | val2 | val3 | val4 | ......
我曾尝试使用DynamicPivot实现这一点,但失败了,因为key1是一个重复的列
SQLError:
为“p”多次指定了列“key1”
我使用的透视查询:
这可能不可能使用轴,因为列名相同。下面是另一个解决方案:
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发布带有问题的实际代码是一个非常好的主意。如果我的问题不够清楚,很抱歉。但我在问题本身中提到了我所期望的结果。目前我仅有的代码是我发布的SQLFIDLE。也许我没有完全理解你的问题。你能再多说一点吗?克劳森,我运行了你给出的查询,但我没有看到相同的结果。在这里,当我在自己的服务器上尝试时,它显示了正确的结果,但是SQL Fiddle出于某种原因忽略了键3。我认为pivot无法实现这一点,但根据输出要求,可能还有其他解决方案。您需要用结果创建一个新表,还是只显示/打印/导出它?