sql >> Database teknologi >  >> RDS >> Oracle

Samlet strengforbindelse i Oracle 10g

Oracle 11g har denne smarte funktion LISTAGG, der er stort set, hvad du ønsker, men da du er på 10g, er dette ikke tilgængeligt for dig (medmindre du beslutter dig for at opgradere).

Hvis du af en eller anden grund ikke ønsker (eller af en eller anden grund ikke kan) opgradere til 11g, vil jeg foreslå, at du ser på nogle alternativer til LISTAGG, som er tilgængelige for dig på 10g.

Du kan tjekke nogle af de foreslåede alternativer her

Hurtigt justeret en hurtig tilpasning af et af de foreslåede alternativer for at matche dit case-scenarie:

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 husk, at dette ikke er den egentlige løsning, da du bliver nødt til at skræddersy den efter dit bord (ikke dummy DUAL-bordet) osv...

Din løsning vil sandsynligvis se noget i retning af:

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

Hvis du vil ændre afgrænsningstegnet, kan du ændre det fra komma i denne del:

(E, NAME||',')

RTRIM er der bare for at klippe det efterfølgende komma fra enden af ​​den sammenkædede streng, hvis du ikke er generet af det efterfølgende komma, kan du udelade RTRIM-funktionen for at bevare læsbarheden.



  1. dvale orakelsekvens producerer stort hul

  2. Hvordan sikkerhedskopierer og gendanner man en database som en kopi på den samme server?

  3. Hvordan opretter man en nedtællingstimer og kører en sql-forespørgsel med PHP, når den er færdig?

  4. Sorter visse værdier til toppen