Конкатенация результатов подзапроса в T-SQL

Дано: Возьмем для примера вот такую простенькую бд

Цель: Получить в результате запроса список авторов с названием книг в одну строку. То есть вид должен быть примерно таким:

|   fullname   |        books       |
|--------------|--------------------|
| Vasya Pupkin | Lalalala; Babababa |
| Ivanov Petr  | Qwerty; Asdfgh     |

Как делал: Сам пытался применить функцию CONCAT_WS для конкатенации через разделитель, но функция принимает только отдельные строки, а не результаты подзапроса.

select
    Author.fullname,
    CONCAT_WS('; ', (
        select Book.caption
        from Book
        where Book.author = Author.id
    )) as books
from Author

Вопрос: Как, собственно, получить целевой результат? Доступа к бд на создание хранимых процедур нет. Возможно только отправлять запросы к удаленной базе.


Ответы (1 шт):

Автор решения: Yitzhak Khabinsky

SQL

-- DDL and sample data population, start
DECLARE @Author TABLE  ([id] integer primary key, [fullname] varchar(50));
DECLARE @Book TABLE  (
  [id] integer primary key, 
  [caption] varchar(50),
  [author] integer
);

INSERT INTO @Author ([id], [fullname]) VALUES
(1, 'Vasya Pupkin'),
(2, 'Ivanov Petr');

INSERT INTO @Book ([id], [caption], [author]) VALUES
(1, 'Lalalala', 1),
(2, 'Babababa', 1),
(3, 'Qwerty', 2),
(4, 'Asdfgh', 2);
-- DDL and sample data population, end

SELECT a.Id, a.fullname, STRING_AGG(b.caption, ', ') as bookList
FROM @Author AS a LEFT OUTER JOIN 
    @Book AS b ON a.id = b.author
GROUP BY a.Id, a.fullname;
→ Ссылка