sum some xml nodes values in sql server 2008

前端 未结 4 721
傲寒
傲寒 2021-01-13 19:24

Please consider this XML:


    10 
    20 
    

        
相关标签:
4条回答
  • 2021-01-13 19:41
    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.

    0 讨论(0)
  • 2021-01-13 19:49

    Try this one -

    DECLARE @XML XML
    SELECT @XML = '
    <Parent ID="p">
        <Child ID="1">10</Child > 
        <Child ID="2">20</Child > 
        <Child ID="3">0</Child > 
    </Parent >
    <Parent ID="p2">
        <Child ID="1">15</Child > 
        <Child ID="2">20</Child > 
        <Child ID="3">5</Child > 
    </Parent >'
    
    SELECT 
          value = SUM(t.value)
        , t.id 
    FROM (
        SELECT 
              value = p.value('.', 'INT')
            , id = p.value('./../@ID', 'VARCHAR(50)')
        FROM @XML.nodes('/Parent/Child') t(p)
    ) t
    --WHERE t.id = 'p'
    GROUP BY t.id
    
    0 讨论(0)
  • 2021-01-13 19:52

    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

    0 讨论(0)
  • 2021-01-13 19:55

    Try this :

    DECLARE @SearchKeyWords XML 
    
    SET @SearchKeyWords =
    '<Parent ID=''p''>
        <Child ID="1">10</Child > 
        <Child ID="2">20</Child > 
        <Child ID="3">0</Child > 
    </Parent >' 
    
    DECLARE @TempSearchKeyWords TABLE
            (
                SearchKeyWord INT
            )
    
    INSERT INTO @TempSearchKeyWords                     
    SELECT SearchKeyWords.SearchKeyword.value('.',' int ') AS SearchKeyword             
    FROM @SearchKeyWords.nodes('/Parent/Child') AS SearchKeyWords(SearchKeyword)
    
    SELECT SUM(SearchKeyWord) FROM @TempSearchKeyWords
    

    This will return 30.

    0 讨论(0)
提交回复
热议问题