我有下表
Id | XML
1 XML1
2 XML2
3 XML3
每个XML都有结构:
<aaa>
<row name="a" value="1" />
<row name="b" value="2" />
<row name="c" value="3" />
</aaa>
<aaa>
<row name="a" value="3" />
<row name="b" value="4" />
<row name="c" value="5" />
</aaa>
<aaa>
<row name="a" value="10" />
<row name="b" value="20" />
<row name="c" value="30" />
</aaa>
我想获得输出表:
a | b | c
1 2 3
3 4 5
10 20 30
我在TSQL中写过但我无法从每个xml中获取完整的参数
SELECT [Id], [XML] FROM table
SELECT
[XML].value('(aaa/row//@name)[1]','varchar(20)') AS 'NAME',
[XML].value('(aaa/row//@value)[1]','varchar(20)') AS 'VALUE'
FROM table
答案 0 :(得分:0)
以下是您在一个变量中使用XML的示例以及用于选择字段的结果代码。
DECLARE @xmlIN XML = '<TableData>
<aaa>
<row name="a" value="1" />
<row name="b" value="2" />
<row name="c" value="3" />
</aaa>
<aaa>
<row name="a" value="3" />
<row name="b" value="4" />
<row name="c" value="5" />
</aaa>
<aaa>
<row name="a" value="10" />
<row name="b" value="20" />
<row name="c" value="30" />
</aaa>
</TableData>'
SELECT t.col.value('@name', 'VARCHAR(25)') [name],
t.col.value('@value', 'VARCHAR(25)') [Value]
FROM @xmlIn.nodes('//TableData/aaa/row') AS t (col)
然后以您描述的格式获取数据,您将不得不做某种PIVOT。
答案 1 :(得分:0)
这应该有效:
SELECT
[XML].value('(aaa/row/@value)[1]','varchar(20)') AS a,
[XML].value('(aaa/row/@value)[2]','varchar(20)') AS b,
[XML].value('(aaa/row/@value)[3]','varchar(20)') AS c
FROM table