2015-05-14 49 views
1

我一整天都在努力工作,仍然没有期望的输出。我需要一个与标题一样的查询。我需要XML SQL查询来获得基于另一个节点值的节点总和值

<aa> 
    <bb> 
    <cc> 
     <typeid>2</typeid> 
     <dd> 
     <amount>10</amount> 
     </dd> 
    </cc> 
    <cc> 
     <typeid>2</typeid> 
     <dd> 
     <amount>20</amount> 
     </dd> 
    </cc> 
    </bb> 
</aa> 

因此,我希望输出将是30,但它必须基于该值类型ID,所以伪代码将是从XML SELECT SUM(节点达),其中(typeid的节点)= 2

我曾尝试:

SELECT t1.c1.value('sum(Amount)', 'float') 
FROM @xmlCase.nodes('//aa/bb/cc') as t(c) 
cross apply t.c.nodes('dd') as t1(c1) 
WHERE t.c.value('typeId[1]', 'int') = 2 

但在这种情况下,我收到了一个值10和20,但我需要这些值的总和。 谢谢。

回答

1

一种可能的方式:

declare @xmlCase XML = '<aa> 
    <bb> 
    <cc> 
     <typeid>2</typeid> 
     <dd> 
     <amount>10</amount> 
     </dd> 
    </cc> 
    <cc> 
     <typeid>2</typeid> 
     <dd> 
     <amount>20</amount> 
     </dd> 
    </cc> 
    </bb> 
</aa>' 

SELECT x.value('sum(cc[typeid=2]/dd/amount)','float') as 'total' 
FROM @xmlCase.nodes('//bb') bb(x) 

基本上以上查询组导致在<bb>元件的水平,并选择<amount>元件的总和,其中对应<typeid>元素等于2

输出:

enter image description here

SQL Fiddle

+1

哇,这工作得非常好,我在stockoverflow相信是回来了,因为你。非常感谢@ har07。 – PawelCz

相关问题