我需要XML SQL查询来根据另一个节点值获取节点值的总和

时间:2015-05-14 09:52:00

标签: sql-server 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>

所以我的欲望输出是30,但它必须基于值类型id,所以伪代码将是 从XML中选择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 个答案:

答案 0 :(得分:1)

一种可能的方式:

searchText.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int  count) {
        // TODO Auto-generated method stub
        ClaimList.this.lviewAdapter.getFilter().filter(searchText.getText().toString());
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub

    }
});

基本上,查询组会在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>

输出

enter image description here

<强> SQL Fiddle