2015-05-14 51 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

相關問題