Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sum some xml nodes values in sql server 2008

Please consider this XML:

<Parent ID="p">
    <Child ID="1">10</Child > 
    <Child ID="2">20</Child > 
    <Child ID="3">0</Child > 
</Parent > 

I want to SUM all child value inside the Parent node with ID="p".for above example I want query return 30

How I can do this?

like image 545
Arian Avatar asked Dec 16 '22 11:12

Arian


2 Answers

select @xml.value('sum(/Parent[@ID = "p"]/Child)', 'float') as Sum

The use of float protects against there being no Parent with that ID. You can then cast this result to int.

like image 181
muhmud Avatar answered Dec 28 '22 17:12

muhmud


Try this :-

 Declare @xml xml 
set @xml='<Parent ID="p">
         <Child ID="1">10</Child > 
         <Child ID="2">20</Child > 
         <Child ID="3">0</Child > 
          </Parent >'

 Select @xml.value('sum(/Parent/Child)','int') as Sum

Result : 30

or if you want the sum for a specific Parent ID then try the below query

 Select @xml.value('sum(/Parent/Child)','int') AS SumVal
 where @xml.exist('/Parent[@ID="p"]') = 1;

Demo in SQL FIDDLE

like image 43
praveen Avatar answered Dec 28 '22 16:12

praveen