sql >> Database >  >> RDS >> Oracle

Geaggregeerde stringverbinding in Oracle 10g

Oracle 11g heeft deze handige functie LISTAGG die ongeveer is wat u wilt, maar aangezien u 10g gebruikt, is dit niet voor u beschikbaar (tenzij u besluit te upgraden).

Als je om wat voor reden dan ook niet wilt (of om welke reden dan ook niet kunt) upgraden naar 11g, raad ik je aan om een ​​aantal alternatieven voor LISTAGG te bekijken die voor jou beschikbaar zijn op 10g.

U kunt enkele van de voorgestelde alternatieven bekijken hier

Snel een snelle aanpassing van een van de voorgestelde alternatieven aangepast aan uw casusscenario:

WITH Q AS
(
    SELECT 'North' POD, 'Rony' NAME FROM DUAL  UNION ALL
    SELECT 'North',     'James'     FROM DUAL  UNION ALL
    SELECT 'North',     'Aby'       FROM DUAL  UNION ALL
    SELECT 'South',     'Sam'       FROM DUAL  UNION ALL  
    SELECT 'South',     'Willy'     FROM DUAL  UNION ALL
    SELECT 'West',      'Mike'      FROM DUAL
)
SELECT   POD,
         RTRIM(
            XMLAGG (XMLELEMENT(e, name||',') ORDER BY name).EXTRACT('//text()'),
            ','
         ) AS name
    FROM q
GROUP BY POD;

Maar onthoud dat dit niet de daadwerkelijke oplossing is, omdat u deze moet aanpassen aan uw tafel (niet de dummy DUAL-tabel) enz...

Uw oplossing ziet er waarschijnlijk ongeveer zo uit:

SELECT   POD,
         RTRIM(
            XMLAGG (XMLELEMENT(E, NAME||',') ORDER BY NAME).EXTRACT('//text()'),
            ','
         ) AS NAME
    FROM tbl1
GROUP BY POD;

Als u het scheidingsteken wilt wijzigen, kunt u dit in dit gedeelte door komma's wijzigen:

(E, NAME||',')

De RTRIM is er alleen om de volgkomma van het einde van de aaneengeschakelde tekenreeks af te knippen. Als je geen last hebt van de volgkomma, kun je de RTRIM-functie weglaten om de leesbaarheid te behouden.



  1. MySQL-query met 'in'-operator:waarom verschillende resultaten met aanhalingstekens?

  2. SQL postgres-aggregatie/pivot van gegevens per week met totalen

  3. Hoe de mysql-database in XAMPP te herstellen?

  4. Hoe System.DirectoryServices te registreren voor gebruik in SQL CLR-gebruikersfuncties?