Извините, если это было задано, просмотрите его немного и не нашли что-то совсем похожее на то, что мне нужно, но если оно есть, пожалуйста, ссылку.конкатенировать несколько столбцов из нескольких таблиц Oracle
Я использую Oracle и пытаюсь агрегировать результат по нескольким столбцам в нескольких таблицах, не используя временную таблицу. Пример ниже:
Table: USERS
--------------
ID | USER_NAME
--------------
1 | Bob
2 | Joe
3 | Mary
Table: PROJECT_USERS
----------------------------------
USER_ID | PROJECT_ID | ACCESS_TYPE
----------------------------------
1 |123 |8
1 |456 |9
1 |789 |10
2 |123 |10
2 |456 |9
2 |789 |8
3 |123 |9
3 |456 |10
3 |789 |10
Я был в состоянии использовать LISTAGG для некоторого успеха в делать вещи, как найти пользователей, которые находятся в той или иной продукции проекта в единое поле, используя запрос типа:
SELECT
LISTAGG(users.user_name, ',') WITHIN GROUP (ORDER BY users.user_name)
FROM
users,
project_users
WHERE
project_users.user_id = users.id
AND project_users.project_id = 123
GROUP BY ID
;
(извинения, если синтаксис немного смещен в выше, заслоняя фактическую структуру и данные по причинам, так что это не точный запрос я использую в прямом эфире) Какой бы выход:
Bob,Joe,Mary
Но то, что я хотел бы, чтобы выход был бы сочетание USERS.USER_NAME и PROJECT_USERS.ACCESS_TYPE агрегировать в подобном формате, возможно, с двумя значениями, разделенными -
Bob-8,Joe-10,Mary-9
я могу получить индивидуальные возвращения
SELECT users.user_name || '-' || project_users.access_type...
Возвращение
Bob-8
Joe-9
Mary-10
и надеялся, что я мог тогда LISTAGG эти результаты, но, к сожалению, не удалось г и это работать. Как упоминалось ранее, временная таблица имеет право, по причинам, которые я не хочу вдаваться, хотя я уверен, что это упростит ситуацию. Использование SELECT в FROM не будет работать, я не думаю, что, как и в конце, я хотел бы иметь возможность использовать это в подзапросах, и мое понимание (и ограниченный опыт в его попытке) заключается в том, что он не будет правильно итерации для каждый проход. Может быть, я ошибаюсь, и просто сделал это неправильно.
Любые предложения?
Спасибо!
На самом деле было бы проще вернуть данные так же, как в списке, в отличие от значений, разделенных запятыми, если вы собираетесь использовать его в подзапросе? – BobC
@BobC, который был бы идеальным, но отчет, который используется для этого, неуклюже используется для анализа данных и повторного ввода его в нечто другое. Это действительно уродливо, а не то, как я вообще буду делать вещи, но в конце мне нужен подзапрос, чтобы вернуть одну строку, которая будет использоваться для этого. По-видимому, соблюдаются надлежащие стандарты целостности данных. – CascadeOverflow