在Sql中从XML中提取数据的SUM

Arp*_*wal 5 xml sql field

我在这样的SQL表中有一个XML字段

<Root>
 <Name>Apollo</Name>
 <Code>1000</Code>
 <Code>2000</Code>
 <Code>3000</Code>
</Root>
Run Code Online (Sandbox Code Playgroud)

我需要编写一个SQL查询来选择'Name'和'Code'值的SUM

SELECT 
 T1.c.value('Name[1] AS VARCHAR(100)') AS Name,
 T1.c.value('Code[1] AS NUMERIC(10,5)') AS TotalCode
FROM TableName
CROSS APPLY xmlField.nodes('Root') AS T1(c)
Run Code Online (Sandbox Code Playgroud)

它给了我这样的输出:

Name                Code
---------------------------
Apollo              1000
Apollo              2000
Apollo              3000
Run Code Online (Sandbox Code Playgroud)

但我需要所有Code标签的值的SUM,如下所示:

Name                Code
---------------------------
Apollo              6000
Run Code Online (Sandbox Code Playgroud)

任何想法如何获得标签值的总和?

Mit*_*ers 3

这不是最“优雅”的,我确信有更直接的路线,但你可以尝试这个

Select
    B.Name,
    SUM(B.TotalCode)
FROM 
(
    SELECT 
       T1.c.value('Name[1]', 'VARCHAR(100)') AS Name,
       T1.c.value('Code[1]', 'NUMERIC(10,5)') AS TotalCode
    FROM TableName
    CROSS APPLY xmlField.nodes('Root') AS T1(c)
) AS B
GROUP BY Name
Run Code Online (Sandbox Code Playgroud)

基本上,这首先从 XML 字段项中提取数据,然后按名称分组并给出总和。就像我说的,不优雅但有效!