2013-12-16 5 views
7

मैं SQL सर्वर क्वेरी से XML फ़ाइल उत्पन्न कर रहा हूं।SQL सर्वर: विशेषता द्वारा XML सॉर्टिंग नियंत्रण के लिए

मुझे तत्वों के मुद्दों को हल करने के बारे में कुछ समस्या है।

उदाहरण के लिए, नीचे सरल कोड है।

<test> 
    <tree abc="123"/> 
    <tree abc="789"/> 
    <tree-order abc="456"/> 
</test> 

आप देख सकते हैं पेड़ और पेड़ों पर अलग-अलग तत्व हैं और मैं के रूप में

<test> 
    <tree abc="123"/> 
    <tree-order abc="456"/> 
    <tree abc="789"/> 
</test> 

इस तरह विशेषताओं के आधार पर क्रमबद्ध करना चाहते हैं।

किसी को भी इस समस्या को हल करने का अच्छा विचार है?

धन्यवाद।

<Main> 

<test> 
    <tree abc="123"/> 
    <tree abc="456"/> 
    <tree-order abc="789/> 
</test> 

<test> 
    <tree abc="123"/> 
    <tree abc="456"/> 
    <tree-order abc="789/> 
</test> 

</Main> 

धन्यवाद:

खेद है कि मैं के रूप में है

<Main> 

<test> 
    <tree abc="123"/> 
    <tree abc="789"/> 
    <tree-order abc="456"/> 
</test> 

<test> 
    <tree abc="123"/> 
    <tree abc="789"/> 
    <tree-order abc="456"/> 
</test> 

</Main> 

होना करने के लिए

नीचे के रूप में विस्तार प्रश्न है।

उत्तर

8

आप मौजूदा एक्सएमएल को पुन: व्यवस्थित करना चाहते हैं, तो आप XQuery उपयोग कर सकते हैं:

declare @data xml = ' 
<test> 
    <tree abc="123"/> 
    <tree abc="789"/> 
    <tree-order abc="456"/> 
</test> 
' 

select @data.query('<test>{for $i in test/* order by $i/@abc return $i}</test>') 

परिणाम:

<test> 
    <tree abc="123" /> 
    <tree-order abc="456" /> 
    <tree abc="789" /> 
</test> 

sql fiddle demo

अद्यतन:

कई नोड्स को पुन: व्यवस्थित करने के लिए, अगर आप इस तरह XQuery का उपयोग कर सकते हैं:

select @data.query(' 
    element Main { 
     for $j in Main/test 
      return element test { 
       for $i in $j/* order by $i/@abc return $i 
      } 
    } 
') 

sql fiddle demo

अपडेट 2

विशेषताओं का पूर्णांक मूल्यों द्वारा आदेश करने के लिए, cast as <type> का उपयोग :

select @data.query(' 
    element Main { 
     for $j in Main/test 
      return element test { 
       for $i in $j/* order by $i/@abc cast as xs:integer? 
        return $i 
      } 
    } 
') 

sql fiddle demo

+1

मैं विस्तार और प्रश्न जोड़ा धन्यवाद! –

संबंधित मुद्दे