Я пытался выяснить это за последние несколько дней, но все еще безуспешно. Я пытался найти ответ, но не уверен, правильно ли я формулирую вопрос, поэтому я надеюсь, что поставлю его здесь в надежде, что один из вас, замечательные люди, сможет помочь!
У меня есть таблица в PostGres Db, в которой хранятся все номера телефонов наших клиентов по их идентификатору и типу (IE Дом, Работа, Сотовый, День, Вечер и т. Д. c ...). Мне нужно вытащить эти телефонные номера и поместить их в 1 из трех столбцов, называемых home_phone, work_phone или cell_phone, в зависимости от типа столбца. Я подумал «просто! Я просто буду использовать оператор case!», Но проблема, с которой я столкнулся, заключается в том, что столбец типа имеет произвольную форму, и мой последний запрос должен быть автоматизирован, поэтому я не могу постоянно обновлять свои операторы case до добавьте любой новый «случайный» тип, который может прийти, и также нет гарантии, что у клиента будет телефонный номер, который подпадает под любую из трех категорий.
Мне как-то нужно иметь возможность уронить телефон номер в мои последние столбцы дома / работы / ячейки, и классифицировать их соответствующим образом, если у меня есть правильный «тип», НО, если у меня нет правильного «типа», то мне все еще нужно, чтобы эти номера телефонов в 1 из трех колонны.
Я попытался выяснить кое-что на основе RANK (), которое в принципе работало бы следующим образом: IF (type = 'home' затем phone_number ELSE SELECT phone_number где RANK () = MAX (RANK ())) AS home_phone , ЕСЛИ (type = 'cell' затем номер_телефона ELSE SELECT номер_телефона где RANK () = MAX (RANK ()) - 1) AS cell_phone, et c ...
Но я нигде не смог добраться с этим, и, честно говоря, я даже не думаю, что это правильно и ведет меня по неверному пути.
Вероятно, уместно сказать, что у меня есть доступ только для чтения.
Любой Помощь будет принята с благодарностью!
Мой текущий код:
select customer_id
,string_agg(home_phone,'|' order by customer_id) as home_phone
,string_agg(cell_phone,'|' order by customer_id) as cell_phone
,string_agg(work_phone,'|' order by customer_id) as work_phone
from(
select
customer_id
,case when type in ('Home', 'phone') then phone_number end as home_phone
,case when type in ('cellphone', 'Cell', 'Mobile') then phone_number end as cell_phone
,case when type in ('Work') then phone_number end as work_phone
from reporting_data.lead_customer_phone_number
order by customer_id
) zzz
group by customer_id