从SQL Server中的xml,获取下一个兄弟值

Pau*_*gle 2 xml sql sql-server

我有一个看起来像这样的表:

CREATE TABLE CustomerXmlData
(CustomerId int,
CustomerData xml)
Run Code Online (Sandbox Code Playgroud)

CustomerId链接到主customer表,CustomerData是一个xml文档,如下所示

<Person>
  <Product>
    <Name>ABC</Name>
    <Value>500</Value>
  </Product>
  <Product>
    <Name>XYZ</Name>
    <Value>600</Value>
  </Product>
</Person>
Run Code Online (Sandbox Code Playgroud)

有几十万个这样的行.在伪代码,我想要做的是"求其平均值ValueProduct地方Name='XYZ’".

我知道如何根据元素属性或基于文档中具有唯一性的父元素来获取值,但在这种情况下这些都不是任何用途.我找不到任何可以让我找到Name我想要的东西,然后获得下一个兄弟的价值.

我可以使用FOR XML并创建一个边表,但是我是否必须使用游标遍历它?我希望有一个更有效的解决方案.

Mik*_*son 5

我找不到任何能让我找到我想要的名字的东西,然后得到下一个兄弟的价值.

declare @Name varchar(10)
set @Name = 'XYZ'

select N.value('.', 'int') as Value    
from CustomerXmlData
  cross apply CustomerData.nodes
    ('/Person/Product[Name = sql:variable("@Name")]/Value') as T(N)
Run Code Online (Sandbox Code Playgroud)