Настройка на схема на Oracle 11g R2 :
CREATE TABLE test (col1, col2, col3, col4, col5 ) КАТО SELECT 1, 'A', 'B', 'C', 'D' FROM DUALUNION ALL SELECT 2, 'A', ' B', 'C', NULL FROM DUALUNION ALL SELECT 3, 'C', 'A', NULL, NULL FROM DUALUNION ALL SELECT 4, 'D', 'A', 'C', NULL FROM DUALUNION ALL SELECT 5, NULL, NULL, NULL, NULL FROM DUALUNION ALL SELECT 6, NULL, NULL, NULL, 'A' FROM DUALUNION ALL SELECT 7, 'B', NULL, NULL, 'A' FROM DUALUNION ALL SELECT 8, NULL, 'C' , NULL, 'A' FROM DUAL;
Заявка 1 :
Ако няма NULL
стойности между други стойности (ще въведе множество запетаи в редове 7 и 8):
SELECT col1, TRIM( ',' FROM col2||','||col3||','||col4||','||col5 ) AS col2FROM тест
<предварителен код>| COL1 | COL2 ||------|---------|| 1 | A,B,C,D || 2 | A,B,C || 3 | C,A || 4 | D,A,C || 5 | (нула) || 6 | А || 7 | B,,,A || 8 | C,,A | Последните две заявки ще работят за всички примери:
Заявка 2 :
SELECT col1, TRIM( ',' FROM col2 || NVL2( col3, ','||col3, NULL ) || NVL2( col4, ','||col4, NULL ) || NVL2( col5, ','||col5, NULL ) ) AS col2FROM тест
<предварителен код>| COL1 | COL2 ||------|---------|| 1 | A,B,C,D || 2 | A,B,C || 3 | C,A || 4 | D,A,C || 5 | (нула) || 6 | А || 7 | B,A || 8 | C,A | Заявка 3 :
SELECT col1, REGEXP_REPLACE( col2||','||col3||','||col4||','||col5, '(^|,),+|,+($ )', '\1' ) AS col2FROM тест
<предварителен код>| COL1 | COL2 ||------|---------|| 1 | A,B,C,D || 2 | A,B,C || 3 | C,A, || 4 | D,A,C || 5 | (нула) || 6 | А || 7 | B,A || 8 | C,A |