请考虑这个XML:
<Parent ID="p">
<Child ID="1">10</Child >
<Child ID="2">20</Child >
<Child ID="3">0</Child >
</Parent >
我希望<{> 1}} Parent
节点内的所有子值 SUM 。对于上面的示例,我想要查询返回ID="p"
我怎么能这样做?
答案 0 :(得分:6)
select @xml.value('sum(/Parent[@ID = "p"]/Child)', 'float') as Sum
float
的使用可防止Parent
与ID
无关。然后,您可以将此结果投射到int
。
答案 1 :(得分:2)
试试这个: -
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
结果:30
或者如果您想要特定Parent ID
的总和,请尝试以下查询
Select @xml.value('sum(/Parent/Child)','int') AS SumVal
where @xml.exist('/Parent[@ID="p"]') = 1;
中的演示
答案 2 :(得分:1)
试试这个 -
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
答案 3 :(得分:1)
试试这个:
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
这将返回30。