2012-09-24 61 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

相關問題