2012-09-24 60 views
0

我有一个sql查询。我需要使用相同的名称(),但不同的属性(ident =“1cat”+“3cat”)来总结两个xml节点。我可以通过它们的数量得到节点([1]和[3]),但是我需要通过“ident”来求和它们。我怎样才能通过他们的理念来总结1Category和3Category?总结两个xml点名,但名称不同但属性不同

DECLARE @xml XML 
SET @xml = 
'<cat:catalog xmlns:cat="http://datypic.com/cat" xmlns:prod="http://datypic.com/prod"> 
    <cat:number ident="1Category">10</cat:number> 
    <cat:number ident="2Category">20</cat:number> 
    <cat:number ident="3Category">30</cat:number> 
</cat:catalog>'; 

WITH XMLNAMESPACES (
'http://datypic.com/cat' AS cat 
) 
SELECT 
    c.c.value('(cat:number/text())[1]', 'INT') '1Category', 
    c.c.value('(cat:number/text())[3]', 'INT') '3Category' 
FROM @xml.nodes('cat:catalog') c(c) 

回答

1
WITH XMLNAMESPACES ( 
'http://datypic.com/cat' AS cat 
) 
SELECT 
    c.c.value('(cat:number[@ident="1Category"])[1]', 'INT') + 
    c.c.value('(cat:number[@ident="3Category"])[1]', 'INT') 
FROM @xml.nodes('cat:catalog') c(c) 
+0

唯唯诺诺的人!你第二次拯救我。这就是我所需要的!非常感谢!! – JohnyMotorhead

1
WITH XMLNAMESPACES ( 
'http://datypic.com/cat' AS cat 
) 
SELECT @xml.value('sum(/cat:catalog/cat:number[@ident=("1Category", "3Category")]/text())', 'INT') 
+0

这也是伟大的!谢谢! – JohnyMotorhead

相关问题