我在SQL表中有一个XML字段,像这样
<Root> <Name>Apollo</Name> <Code>1000</Code> <Code>2000</Code> <Code>3000</Code> </Root>
我需要编写一个SQL查询来选择“名称”和“代码”值的总和
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)
它给我这样的输出:
Name Code --------------------------- Apollo 1000 Apollo 2000 Apollo 3000
但是我需要像这样的所有Code标签的值的总和:
Name Code --------------------------- Apollo 6000
有什么想法如何获得标签值的总和?
这不是最“优雅”的路线,我敢肯定还有更直接的路线,但是您可以尝试一下
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
基本上,这首先是将数据从XML字段项中提取出来,然后按名称分组并给出总和。就像我说的那样,不是很优雅,但是很有效!