sql >> Databasteknik >  >> RDS >> Oracle

Aggregat stränganslutning i Oracle 10g

Oracle 11g har den här snygga funktionen LISTAGG som är i stort sett vad du vill ha, men eftersom du är på 10g är detta inte tillgängligt för dig (såvida du inte bestämmer dig för att uppgradera).

Om du av någon anledning inte vill (eller inte kan av någon anledning) uppgradera till 11g, skulle jag föreslå att du tittar på några alternativ till LISTAGG som är tillgängliga för dig på 10g.

Du kan kolla in några av de föreslagna alternativen här

Justerade snabbt en snabb anpassning av ett av de föreslagna alternativen för att matcha ditt fall:

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;

Men kom ihåg att detta inte är den faktiska lösningen eftersom du måste skräddarsy den efter ditt bord (inte dummy DUAL-bordet) osv...

Din lösning kommer förmodligen att se ut ungefär i stil med:

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

Om du vill ändra avgränsaren kan du ändra den från kommatecken i denna del:

(E, NAME||',')

RTRIM är där bara för att klippa av det avslutande kommatecken från slutet av den sammanlänkade strängen, om du inte störs av det avslutande kommatecken kan du utelämna RTRIM-funktionen för att bevara läsbarheten.



  1. hur man överför CLOB-data från en databas till en annan fjärransluten ORACLE-databas med DBLinks

  2. Symfony2 Doctrine-schemauppdatering misslyckas

  3. Väntar du på att ett inskickat jobb ska slutföras i Oracle PL/SQL?

  4. hibernate - Postgres- mållistor kan ha högst 1664 poster