Как объединить несколько столбцов в один? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть следующий пример таблицы:

| name   | email1          | email2            | email3         | 
.................................................................
| John   | john@gmail.com  | john@hotmail.com  | john@yahoo.com |
| Jane   | jane@gmail.com  | NULL              | NULL           |

Мне нужен запрос для объединения столбцов электронной почты таким образом, чтобы результат выглядел следующим образом, игнорируя нули:

| name   | email            |
.............................
| John   | john@gmail.com   |
| John   | john@hotmail.com | 
| John   | john@yahoo.com   |
| Jane   | jane@gmail.com   |

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Вы можете использовать боковое соединение:

select t.name, v.email
from t cross join lateral
     (values (email1), (email2), (email3)) v(email)
where v.email is not null;
0 голосов
/ 24 марта 2020

Вы можете union all ряд запросов в каждом столбце электронной почты:

SELECT name, email1
WHERE  email1 IS NOT NULL
UNION ALL
SELECT name, email2
WHERE  email2 IS NOT NULL
UNION ALL
SELECT name, email3
WHERE  email3 IS NOT NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...