我正在使用SQL Server(2008/2012),我知道有很多搜索类似的答案,但我似乎无法找到适当的示例/指针为我的案件。使用SQL转置/扁平化XML结构到列
我有一个SQL Server表保存这些数据的XML列:
<Items>
<Item>
<FormItem>
<Text>FirstName</Text>
<Value>My First Name</Value>
</FormItem>
<FormItem>
<Text>LastName</Text>
<Value>My Last Name</Value>
</FormItem>
<FormItem>
<Text>Age</Text>
<Value>39</Value>
</FormItem>
</Item>
<Item>
<FormItem>
<Text>FirstName</Text>
<Value>My First Name 2</Value>
</FormItem>
<FormItem>
<Text>LastName</Text>
<Value>My Last Name 2</Value>
</FormItem>
<FormItem>
<Text>Age</Text>
<Value>40</Value>
</FormItem>
</Item>
</Items>
所以,即使的<FormItem>
结构将是一样的,我可以有多个(最常见的不超过20 -30)套形式的项目..
我基本上是试图从SQL在下面的格式返回查询,即基于/的FormItem /文本动态列:
FirstName LastName Age ---> More columns as new `<FormItem>` are returned
My First Name My Last Name 39 Whatever value etc..
My First Name 2 My Last Name 2 40
因此,在现阶段,我有以下几点:
select
Tab.Col.value('Text[1]','nvarchar(100)') as Question,
Tab.Col.value('Value[1]','nvarchar(100)') as Answer
from
@Questions.nodes('/Items/Item/FormItem') Tab(Col)
当然,这还没有调换我的XML行转换成列,显然是无论如何固定领域..我一直在尝试不同的“动态SQL”的方法SQL执行不同的选择(在我的情况下)<Text>
节点,然后使用某种类型的Pivot?但我似乎无法找到魔术组合来返回我需要的结果作为每行的动态一组列(<Item>
集合<Items>
)。
我确定可以看到这么多非常相似的例子,但是这个解决方案再次避开了我!
任何帮助感激地收到!
谢谢!正如我所需要的那样工作。实际上,我在另一个级别上方显示了示例,但是这实际上是将组合在一起..但关键部分是将变量xml节点- 显示为具有
重复行的列。非常感谢一个非常详细的例子! –
2013-03-04 09:20:33