我无法找到问题的解决方案,我希望对某些人来说很容易。
以下是我的xml的一部分:
<Income>
<IncomeItem>
<TypeId>29</TypeId>
<Description>test1</Description>
</IncomeItem>
<IncomeItem>
<TypeId>29</TypeId>
<Description>test2</Description>
</IncomeItem>
<IncomeItem>
<TypeId>29</TypeId>
<Description>test3</Description>
</IncomeItem>
</Income>
我需要输出:test1 test2 test3
TypeId
会有更多类型,因此Description
的值必须基于TypeId
。
伪代码看起来像:
Select Decsription From XML where TypeId = 29
答案 0 :(得分:1)
这是一种可能的方式:
declare @xml XML = '<Income>
<IncomeItem>
<TypeId>29</TypeId>
<Description>test1</Description>
</IncomeItem>
<IncomeItem>
<TypeId>29</TypeId>
<Description>test2</Description>
</IncomeItem>
<IncomeItem>
<TypeId>29</TypeId>
<Description>test3</Description>
</IncomeItem>
</Income>'
SELECT x.value('Description[1]','varchar(max)') as 'description'
FROM @xml.nodes('//IncomeItem[TypeId=29]') i(x)
如果要将Description
值连接成一行,一种可能的方法是使用xquery for
循环(和concat()
函数在值之间追加空格(如果需要)): / p>
SELECT @xml.query('for $d in //IncomeItem[TypeId=29]/Description return concat($d, " ")')
.value('.','varchar(max)') as 'description'
<强> SQL Fiddle 强>