Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

तारों को जोड़ने/एकत्रित करने का इष्टतम तरीका

समाधान

इष्टतम की परिभाषा अलग-अलग हो सकते हैं, लेकिन यहां बताया गया है कि नियमित ट्रांजैक्ट एसक्यूएल का उपयोग करके विभिन्न पंक्तियों से स्ट्रिंग्स को कैसे जोड़ा जाए, जो कि Azure में ठीक काम करना चाहिए।

;WITH Partitioned AS
(
    SELECT 
        ID,
        Name,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS NameNumber,
        COUNT(*) OVER (PARTITION BY ID) AS NameCount
    FROM dbo.SourceTable
),
Concatenated AS
(
    SELECT 
        ID, 
        CAST(Name AS nvarchar) AS FullName, 
        Name, 
        NameNumber, 
        NameCount 
    FROM Partitioned 
    WHERE NameNumber = 1

    UNION ALL

    SELECT 
        P.ID, 
        CAST(C.FullName + ', ' + P.Name AS nvarchar), 
        P.Name, 
        P.NameNumber, 
        P.NameCount
    FROM Partitioned AS P
        INNER JOIN Concatenated AS C 
                ON P.ID = C.ID 
                AND P.NameNumber = C.NameNumber + 1
)
SELECT 
    ID,
    FullName
FROM Concatenated
WHERE NameNumber = NameCount

व्याख्या

दृष्टिकोण तीन चरणों तक उबलता है:

  1. OVER . का उपयोग करके पंक्तियों को क्रमांकित करें और PARTITION संयोजन के लिए आवश्यकतानुसार उन्हें समूहबद्ध और क्रमबद्ध करना। परिणाम Partitioned है सीटीई। हम बाद में परिणामों को फ़िल्टर करने के लिए प्रत्येक विभाजन में पंक्तियों की संख्या रखते हैं।

  2. पुनरावर्ती CTE का उपयोग करना (Concatenated ) पंक्ति संख्याओं के माध्यम से पुनरावृति करें (NameNumber कॉलम) Name जोड़ना FullName . के मान स्तंभ।

  3. उच्चतम NameNumber वाले परिणामों को छोड़कर सभी परिणामों को फ़िल्टर करें ।

कृपया ध्यान रखें कि इस क्वेरी को पूर्वानुमेय बनाने के लिए दोनों समूहों को परिभाषित करना होगा (उदाहरण के लिए, आपके परिदृश्य में समान ID वाली पंक्तियों में) संयोजित हैं) और छँटाई (मैंने मान लिया था कि आप केवल संयोजन से पहले वर्णानुक्रम में स्ट्रिंग को क्रमबद्ध करते हैं)।

मैंने निम्न डेटा के साथ SQL Server 2012 पर समाधान का त्वरित परीक्षण किया है:

INSERT dbo.SourceTable (ID, Name)
VALUES 
(1, 'Matt'),
(1, 'Rocks'),
(2, 'Stylus'),
(3, 'Foo'),
(3, 'Bar'),
(3, 'Baz')

क्वेरी परिणाम:

ID          FullName
----------- ------------------------------
2           Stylus
3           Bar, Baz, Foo
1           Matt, Rocks


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सी # में एसक्लट्रांसक्शन का उपयोग कैसे करें

  2. SQL सर्वर में संग्रहीत कार्यविधि के लिए स्तंभ जानकारी लौटाएँ:sp_sproc_columns

  3. SQL सर्वर (MSSQL DBA) शुरुआती डेटाबेस प्रशासकों के लिए डेटाबेस ट्यूटोरियल

  4. .NET/SQL सर्वर में कनेक्शन पूलिंग?

  5. SQL सर्वर (T-SQL) में "कॉन्फ़िगरेशन विकल्प 'एजेंट XP' मौजूद नहीं है" को कैसे ठीक करें