2011-04-26 8 views
5

PostgreSQL में आदेश के साथ एसक्यूएल सर्वर, समस्या का string_agg, इस बहुत ही उपयोगी string_agg समारोह, तो वह पूछताछ की तरह अनुमति देता है।पोर्टिंग PostgreSQL

अब, मैं एक CLR उपयोगकर्ता निर्धारित सकल रूप में एसक्यूएल सर्वर में बंदरगाह यह करने के लिए कोशिश कर रहा हूँ। (: क्यों यह एसक्यूएल सर्वर का हिस्सा पहले से ही नहीं है ?? जो सवाल भीख माँगती हूँ) कोड अपने आप में एक समस्या है, के रूप में वहाँ उदाहरण के हजारों सभी वेब इस विशेष कुल बनाने के लिए अधिक कर रहे हैं नहीं है।

समस्या यह है कि, मुझे ORDER BY को लागू करने का एक साफ तरीका नहीं मिल रहा है, क्योंकि SQL सर्वर न केवल कुल कार्य के भीतर ORDER का समर्थन नहीं करता है, यह subquery में ऑर्डर के उपयोग को भी रोकता है। मेरी सबसे अच्छी शर्त यह है:

SELECT 
    contacts.first_name, 
    contacts.last_name, 
    (
     SELECT 
      dbo.string_agg(number, ', ') 
     FROM 
      (
       SELECT TOP <some really large number> 
        number 
       FROM 
        phones 
       WHERE 
        phones.contact_id = contacts.id 
       ORDER BY 
        phones.priority 
      ) AS phones 
    ) AS phone_numbers 
FROM 
    contacts 

क्या कोई बेहतर कामकाज है? और हां, मैंने Is order by clause allowed in a subquery पढ़ा है, और यह है, मैं कहता हूं, subquery में ऑर्डर के वैध उपयोग मामले।

उत्तर

0

लग रहा है SQL सर्वर के सीमा के आस-पाने के लिए TOP <some really large number> के साथ एक सबक्वेरी का उपयोग कर बेहतर कोई दूसरा रास्ता नहीं है की तरह:

SELECT 
    contacts.first_name, 
    contacts.last_name, 
    (
     SELECT 
      dbo.string_agg(number, ', ') 
     FROM 
      (
       SELECT TOP <some really large number> 
        number 
       FROM 
        phones 
       WHERE 
        phones.contact_id = contacts.id 
       ORDER BY 
        phones.priority 
      ) AS phones 
    ) AS phone_numbers 
FROM 
    contacts 
0

आपकी सर्वश्रेष्ठ शर्त क्वेरी आपके इच्छित परिणामों को वापस नहीं लौटाएगी। जब ORDER BY का उपयोग उप-उपरोक्त में शीर्ष के साथ किया जाता है, तो ORDER BY का उपयोग केवल शीर्ष स्थिति का मूल्यांकन करने के लिए किया जाता है। यह वास्तव में आपके लिए डेटा का ऑर्डर नहीं करता है।

+0

मैं "टॉप <वास्तव में कुछ बड़ी संख्या>" के साथ जगह ले ली है "टॉप 100 प्रतिशत", और ऐसा लगता है कि काम कर रहा है। – sayap