У меня есть таблица политик и таблица клиентов. Для каждой политики у меня может быть много клиентов. Я хочу обернуть данные клиентов в одну запись, сгруппированную по PolicyId.
Итак, это мой запрос:
SELECT p.Id AS POLICY, LISTAGG(c.Name || ',' || c.Address || ',' || c.Phone || '||') AS CUSTOMERS
FROM Policies p
INNER JOIN Customers c ON c.PolicyId = p.Id
WHERE p.Id = 'AXSD1234'
GROUP BY p.Id
Проблема в том, что если одно из полей клиента равно нулю, все значение, полученное в строке CUSTOMERS, также становится нулевым. Поэтому, если у меня есть таблица «Клиенты», подобная следующей:
+----+----------+------+------------+-------+
| Id | PolicyId | Name | Address | Phone |
+----+----------+------+------------+-------+
| 1 | AXSD1234 | Jhon | Street 123 | 1234 |
| 2 | AXSD1234 | Anna | NULL | 2345 |
+----+----------+------+------------+-------+
Я бы ожидал получить что-то вроде этого:
+----------+------------------------------------+
| POLICY | CUSTOMERS |
+----------+------------------------------------+
| AXSD1234 | John,Street 123,1234||Anna,,2345|| |
+----------+------------------------------------+
Но вместо этого я получаю это:
+----------+-----------+
| POLICY | CUSTOMERS |
+----------+-----------+
| AXSD1234 | NULL |
+----------+-----------+
Есть ли способ предотвратить это, кроме использования NVL или чего-либо подобного в каждом поле LISTAGG?
Может быть, к этому есть совершенно другой подход?
Спасибо вам в аванс для чтения.