Это не то, что вы обычно делаете в SQL.В таблице есть строки и столбцы, и, как правило, значение sin в строке должно быть независимым от других строк.
Это можно сделать с помощью row_number()
, следя за критериями сортировки:
select (case when 1 = row_number() over (partition by a.id order by b.name)
then a.name
end) as Author,
b.name as Book
from a left join
b
on a.id = b.a_id
order by a.id, b.name;
Очень важно, чтобы внешние клавиши order by
соответствовали клавишам в предложениях partition by
и order by
.
Может оказаться более полезным создать одну строку для каждого автора.Синтаксис варьируется в зависимости от базы данных, но я думаю, что стандартная функция listagg()
:
select a.name as Author,
listagg(b.name, '; ') within group (order by b.name) as Book
from a left join
b
on a.id = b.a_id
group by a.name;