У меня есть таблица, как показано ниже
-------------
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
0
Swapnil Shende
22 Сен 2020 в 01:31
1 ответ
Лучший ответ
- Вам необходимо агрегировать строки в столбце NAME, поэтому listagg < / a> твое.
- Вам нужно выбрать одно значение из столбца NAME, где DEFAULT - «да», поэтому выберите его с помощью case / декодировать и объединить с любой функцией.
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
1
astentx
21 Сен 2020 в 22:51
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.