Конкатенация строк в то время как питание для нулей

У меня есть следующий скрипт:

select
siteid
address1,
address2,
address3,
address4,
address5
from tblsites

... который может вернуть что-то вроде:-

siteid address1     address2 address3   address4   address5
123    1 New Street NULL     New Town   NULL       Newvile
456    2 Elm Road   NULL     NULL       New York   New York

Можно ли в Oracle надежно объединить эти данные, предоставляя нулевые значения и разделяя строки запятыми. Итак, желаемый результат для данных выше:

siteid address
123    1 New Street, New Town, Newvile
456    2 Elm Road, New York, New York

2 ответа

Решение

Ты можешь использовать NVL2 чтобы проверить, не являются ли компоненты адреса ненулевыми:

SQL Fiddle

Настройка схемы Oracle 11g R2:

CREATE TABLE tblsites ( siteid, address1, address2, address3, address4, address5 ) AS
  SELECT 123, '1 New Street', CAST( NULL AS VARCHAR2(50) ), 'New Town', NULL, 'Newvile' FROM DUAL UNION ALL
  SELECT 456, '2 Elm Road', NULL, NULL, 'New York', 'New York' FROM DUAL;

Запрос 1:

SELECT siteid,
       RTRIM(
            NVL2( address1, address1 || ', ', NULL )
         || NVL2( address2, address2 || ', ', NULL )
         || NVL2( address3, address3 || ', ', NULL )
         || NVL2( address4, address4 || ', ', NULL )
         || NVL2( address5, address5 || ', ', NULL ),
         ', '
       ) AS address
FROM   tblsites

Результаты:

| SITEID |                         ADDRESS |
|--------|---------------------------------|
|    123 | 1 New Street, New Town, Newvile |
|    456 |  2 Elm Road, New York, New York |
SELECT siteid,
       REGEXP_REPLACE((address1||','||address2||','||address3||','||address4||','||address5),'[,]+',',') AS address
FROM tblsites

ВЫХОД

SITEID  ADDRESS
123     1 New Street,New Town,New vile
456     2 Elm Road,New York,New York

DEMO

http://sqlfiddle.com/

Другие вопросы по тегам