Как получить несколько строк при использовании внутреннего предложения WHERE IN? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть таблица customers со столбцами zip и cust_id, которая содержит каждый почтовый индекс для каждого клиента.У меня есть справочная таблица zip_state со столбцами zip и state, которая содержит каждый почтовый индекс в каждом штате.

Я хотел бы сделать список состояний для каждого клиента - что-то вроде:

states      cust_id
--------- ---------
AL,TX,FL        112
WA,VA           113
FL,CA           114

Я получил следующий запрос:

SELECT LISTAGG( state, ',' ) WITHIN GROUP( ORDER BY state ) states, '112' cust_id
    FROM (SELECT DISTINCT state FROM zip_state WHERE zip IN (
        SELECT zip FROM customers WHERE cust_id = '112'));

..., который выдает:

states      cust_id
--------- ---------
AL,TX,FL        112

Из-за предложения WHERE IN, яЯ могу перечислить состояния только для одного клиента.Как я могу изменить запрос так, чтобы получить желаемый набор результатов, как указано выше?

1 Ответ

0 голосов
/ 23 октября 2018

Использование group by:

SELECT LISTAGG(state, ',' ) WITHIN GROUP( ORDER BY state ) states, cust_id
FROM (SELECT DISTINCT cust_id, state
      FROM zip_state z JOIN
           customers c
           on c.zip = z.zip
     ) zc
GROUP BY cust_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...