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

Sammenkæd værdier fra flere kolonner i Oracle

SQL Fiddle

Oracle 11g R2 Schema Setup :

CREATE TABLE test (col1, col2, col3, col4, col5 ) AS
          SELECT 1, 'A', 'B', 'C', 'D' FROM DUAL
UNION ALL SELECT 2, 'A', 'B', 'C', NULL FROM DUAL
UNION ALL SELECT 3, 'C', 'A', NULL, NULL FROM DUAL
UNION ALL SELECT 4, 'D', 'A', 'C', NULL FROM DUAL
UNION ALL SELECT 5, NULL, NULL, NULL, NULL FROM DUAL
UNION ALL SELECT 6, NULL, NULL, NULL, 'A' FROM DUAL
UNION ALL SELECT 7, 'B', NULL, NULL, 'A' FROM DUAL
UNION ALL SELECT 8, NULL, 'C', NULL, 'A' FROM DUAL;
 

Forespørgsel 1 :

Hvis der ikke er nogen NULL værdier mellem andre værdier (det vil introducere flere kommaer i række 7 og 8):

SELECT col1,
       TRIM( ',' FROM col2||','||col3||','||col4||','||col5 ) AS col2
FROM   test
 

Resultater :

| COL1 | COL2 | |------|---------| | 1 | A,B,C,D | | 2 | A,B,C | | 3 | C,A | | 4 | D,A,C | | 5 | (null) | | 6 | A | | 7 | B,,,A | | 8 | C,,A |

De sidste to forespørgsler fungerer for alle eksempler:

Forespørgsel 2 :

SELECT col1, TRIM( ',' FROM col2 || NVL2( col3, ','||col3, NULL ) || NVL2( col4, ','||col4, NULL ) || NVL2( col5, ','||col5, NULL ) ) AS col2 FROM test

Resultater :

| COL1 | COL2 | |------|---------| | 1 | A,B,C,D | | 2 | A,B,C | | 3 | C,A | | 4 | D,A,C | | 5 | (null) | | 6 | A | | 7 | B,A | | 8 | C,A |

Forespørgsel 3 :

SELECT col1,
       REGEXP_REPLACE( col2||','||col3||','||col4||','||col5, '(^|,),+|,+($)', '\1' ) AS col2
FROM   test
 

Resultater :

| COL1 | COL2 | |------|---------| | 1 | A,B,C,D | | 2 | A,B,C | | 3 | C,A, | | 4 | D,A,C | | 5 | (null) | | 6 | A | | 7 | B,A | | 8 | C,A |

  1. Oracle SQL:Sådan læser og øger du et felt

  2. Hvordan laver man en anden PDO mysql-forespørgsel på et stykke tid fra en anden forespørgsel?

  3. Sådan installeres og sikres MariaDB 10 i CentOS 6

  4. Hvordan kontrollerer man rollen for den nuværende PostgreSQL-bruger fra Qt-applikationen?