Сортировать значение в массив - PullRequest
0 голосов
/ 15 октября 2019

У меня есть вопрос в PLSQL. ORACLE Я получил таблицу объектов, и в этой таблице я собираю эти типы объектов:

    OBJECTS_TABLE
object1 -> ID: 1 VALUE: a
object2 -> ID: 2 VALUE: b
object3 -> ID: 3 VALUE: c
object4 -> ID: 1 VALUE: d

вместо этого я хочу отсортировать его и получил

    OBJECTS_TABLE
object1 -> ID: 1 VALUE: a,d
object2 -> ID: 2 VALUE: b
object3 -> ID: 3 VALUE: c

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Это помогло бы, если бы вы опубликовали описание таблицы, поэтому я просто угадаю, что это (objects_table CTE) - это то, что у вас есть и что вы хотите получить (строка # 8 и далее):

SQL> with objects_table (id, value) as
  2    (Select 1, 'a' from dual union all
  3     select 2, 'b' from dual union all
  4     select 3, 'c' from dual union all
  5     select 1, 'd' from dual
  6    )
  7  -- The following SELECT might be what you are looking for
  8  select id, listagg(value, ',') within group (order by value) value
  9  from objects_table
 10  group by id
 11  order by id;

        ID VALUE
---------- --------------------
         1 a,d
         2 b
         3 c

SQL>
0 голосов
/ 15 октября 2019

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

Если я вас правильно понимаю, то я в основном напишу новую таблицу. И сделайте процедуру, которая перебирает первую таблицу:

BEGIN
  FOR cursor IN cursor_through_original_table
    LOOP
    BEGIN
      SELECT value
        INTO temp_variable
        FROM new_table
       WHERE id = cursor.id;
    EXCEPTION
      WHEN no_data_found THEN
        temp_variable := NULL;
    END;
    IF temp_variable IS NOT NULL THEN
      UPDATE new_table
         SET value = temp_variable || ', ' || cursor.value
       WHERE id = cursor.id;
    ELSE
      INSERT INTO new_table (id, value)
      VALUES (cursor.id, cursor.value);
    END IF;
  END LOOP;
END;

Это не код для копирования-вставки, он написан без тестирования или даже перечитывается, так что он обязательно будет иметь ошибки, и еготакже отсутствуют декларации. Но это поможет мне понять, как это сделать.

Я надеюсь, что это соответствует вашим потребностям, и вы получите то, над чем работаете.

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