Получать значения из разных строк через запятую. в plsql

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть таблица, как показано ниже

 -------------
ID   | NAME | DEFAULT
-------------
1001 | A    | yes
1001 | B    |no
1001 | C    |no
1002 | D    |no
1002 | E    |yes
1002 | F    |no
1003 | C    |yes
1003 | E    |no
1003 | G    |
-------------
  

Я хочу добиться следующего

 ID   | NAME  | DEFAULT
----------------------
1001 | A,B,C | A
1002 | D,E,F | E
1003 | C,E,G | C
-------------
  

Как я могу добиться, я очень новичок в plsql.Пожалуйста, помогите

Я пробовал это

 select id,LISTAGG(name, ', ') WITHIN GROUP (ORDER BY id),CASE default WHEN  yes THEN name END as "default" from table_name
  

Комментарии:

1. взгляните на функцию listagg — docs.oracle.com/cd/E11882_01/server.112/e41084/… Это не pl / sql, просто прямой oracle sql. Pl / sql — это язык программирования.

2. @OldProgrammer Я попробовал это и успешно получил столбец id, name, но не смог получить столбец по умолчанию

Ответ №1:

  1. Вам нужно объединить строки в столбце NAME, поэтому listagg ваш.
  2. Вам нужно выбрать одно значение из столбца NAME, где ПО умолчанию установлено значение «да», поэтому выберите его с помощью case / decode и агрегируйте с любой функцией.
 select
  id
  , listagg(name, ',') within group(order by name asc) as name
  , min(decode(lower(default), 'yes', name)) as default
from yourtable
group by id