В Oracle как выбрать несколько значений из связанной таблицы и сохранить их в одном столбце? - PullRequest
2 голосов
/ 28 сентября 2010

Я выбираю столбцы из одной таблицы и хотел бы выбрать все значения столбца из связанной таблицы, когда две таблицы имеют совпадающее значение, разделить их запятыми и отобразить их в одном столбце с моими результатами изтаблица первая.

Я довольно новичок в этом и заранее извиняюсь, если не правильно формулирую.

Ответы [ 2 ]

1 голос
/ 28 сентября 2010

Требуется функция агрегации или объединения строк, варианты:

  • Если вы используете Oracle 11gR2, есть встроенная функция для агрегирования строк с разделителем под названием * 1005.*LISTAGG(column, delimiter).

  • Если вы используете какой-либо более ранний выпуск базы данных Oracle, вы можете использовать функцию WM_CONCAT(column), однако у вас нет выбора разделителя и вам придетсяиспользуйте что-то вроде TRANSLATE(string, string_to_replace, replacement_string), чтобы впоследствии изменить разделитель, если ваши данные не содержат запятых.

  • Как уже упоминал Л.Бушкин, вы можете создать пользовательскую функцию вваша схема для выполнения агрегации строк для вас.Вот пример кода PL / SQL для одного: http://www.oracle -base.com / article / misc / StringAggregationTechniques.php # user_defined_aggregate_function

1 голос
/ 28 сентября 2010

Похоже, вы пытаетесь взять несколько строк и объединить их в одну строку, объединяя строковые значения из одного или нескольких столбцов. Да?

Еслив этом случае я могу вам сказать, что это более сложная проблема, чем кажется, если вы хотите сделать это с помощью переносимого SQL - особенно если вы заранее не знаете, сколько элементов вы можете получить.

Специфичное для Oracle решение, часто используемое в таких случаях, заключается в реализации пользовательской агрегатной функции - STRAGG().Вот ссылка на статью , которая точно описывает, как это сделать, и содержит примеры ее использования.

Если вы используете Oracle 9i или более позднюю версию и готовы жить с использованием недокументированных функций(это может измениться в будущем), вы также можете посмотреть на функцию WM_CONCAT(), которая делает то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...