我在sql server中处理xml的新手,我有一个问题,我没有找到一个例子或答案,所以如果你们可以帮助我,这将是非常有用的。
我有各种xml iside a table" T1"在xml列类型" xmlCol"下,这是xml结构:
Row 1
<icfd:Ips totalIR="0" totalIT="7223.9">
<icfd:Tras>
<icfd:Tra impt="AIV" ts="16" imp="517.1"/>
<icfd:Tra impt="SRI" ts="8" imp="18.3"/>
</icfd:Tras>
</icfd:Ips>
Row 2
<icfd:Ips totalIR="10" totalIT="123.9">
<icfd:Tras>
<icfd:Tra impt="AIV" ts="34" imp="345.1"/>
</icfd:Tras>
</icfd:Ips>
我试图获得这样的结果:
Tra totalIR totalIT
-------------------------------------------
AIV(517.1),SRI(18.3) 0 7223.9
AIV(345.1) 10 123.9
如何才能成为进行此查询的正确方法?
我有这个,但我无处可去:
------------------ SQL server query -----------------------
WITH
XMLNAMESPACES ('http://www.stwaree/icfd/3' AS icfd)
SELECT
B.value('@impt', 'varchar(max)') + '(' +
B.value('@imp', 'varchar(max)') + ')' AS Tra
FROM
[T1] CROSS APPLY [xmlCol].nodes('//icfd:Tra') AS A(B)
----------------------- Result ----------------------------
Tra
----------
AIV(517.1)
SRI(18.3)
AIV(345.1)
感谢您的帮助。
答案 0 :(得分:0)
with xmlnamespaces('http://www.stwaree/icfd/3' as icfd)
select T.XMLCol.query('for $i in /icfd:Ips/icfd:Tras/icfd:Tra
return element X{concat(",", data($i/@impt), "(", data($i/@imp), ")")}'
).value('substring(., 2)', 'nvarchar(max)') as Tra,
T.XMLCol.value('/icfd:Ips[1]/@totalIR', 'varchar(10)') as totalIR,
T.XMLCol.value('/icfd:Ips[1]/@totalIT', 'varchar(10)') as totalIT
from T;