sql >> Database >  >> RDS >> Oracle

Verschillende CSV-waarden met REGEXP_REPLACE in oracle

U kunt Oracle-verzamelingen gebruiken. CAST() gekoppeld aan COLLECT() kan waarden samenvoegen tot een door de gebruiker gedefinieerde verzameling en vervolgens SET() zal de duplicaten verwijderen. Dan kun je LISTAGG() . gebruiken om de verzameling naar een tekenreeks te converteren.

Oracle-configuratie :

CREATE TYPE intlist IS TABLE OF INT;
/

CREATE TYPE stringlist IS TABLE OF VARCHAR2(4000);
/

CREATE TABLE table_name ( ColA NUMBER(5,0), ColB VARCHAR2(20) );
INSERT INTO table_name
  SELECT 1, 'POW' FROM DUAL UNION ALL
  SELECT 2, 'POW' FROM DUAL UNION ALL
  SELECT 1, 'POWPRO' FROM DUAL UNION ALL
  SELECT 1, 'PRO' FROM DUAL UNION ALL
  SELECT 2, 'PRO' FROM DUAL UNION ALL
  SELECT 1, 'PROUTL' FROM DUAL UNION ALL
  SELECT 1, 'TNEUTL' FROM DUAL UNION ALL
  SELECT 1, 'UTL' FROM DUAL UNION ALL
  SELECT 1, 'UTLTNE' FROM DUAL;

Zoekopdracht :

SELECT ( SELECT LISTAGG( COLUMN_VALUE, ',' )
                  WITHIN GROUP ( ORDER BY COLUMN_VALUE )
         FROM   TABLE( ColA ) ) AS ColA,
       ( SELECT LISTAGG( COLUMN_VALUE, ',' )
                  WITHIN GROUP ( ORDER BY COLUMN_VALUE )
         FROM   TABLE( ColB ) ) AS ColB  
FROM   (
  SELECT SET( CAST( COLLECT( ColA ORDER BY ColA ) AS INTLIST ) ) ColA,
         SET( CAST( COLLECT( ColB ORDER BY ColB ) AS STRINGLIST ) ) ColB
  FROM   table_name
);

Uitvoer :

ColA ColB
---- ---------------------------------------
1,2  POW,POWPRO,PRO,PROUTL,TNEUTL,UTL,UTLTNE


  1. Hoe de bovenste 1000 rijen uit een tabel te verwijderen met SQL Server 2008?

  2. mysql_insert_id() geeft altijd 0 . terug

  3. batchbestand om de uitvoer van de psql-query op te slaan in een variabele

  4. MySQL na invoegtrigger krijgt automatisch verhoogde waarde, update veldwaarde na invoegen geeft onbekende kolomfout