Дано: есть таблица
id Author_ID Book_ID
1 1 1
2 1 2
3 2 3
4 2 4
Требуется получить из неё следующую таблицу: для каждого автора выводим одну строку, где указано Id автора и список всех id его книг, наподобие:
Author_ID Books
1 1;1;
2 2;2;
Сейчас задача решается при помощи следующего запроса:
Вопросы:
a) какие есть варианты запроса без использования xml?
b) какие есть варианты запроса с использованием CTE вне зависимости от использования / не использования xml?
c) какие ещё вообще варианты решения есть?
Версия сервера - 2014, редакция - Developer Edition.
CLR не предлагать.
CREATE TABLE AuthorsInBooks( id INTEGER identity, Author_ID INTEGER, Book_ID INTEGER); insert into AuthorsInBooks values (1,1),(1,2),(2,3),(2,4)
id Author_ID Book_ID
1 1 1
2 1 2
3 2 3
4 2 4
Требуется получить из неё следующую таблицу: для каждого автора выводим одну строку, где указано Id автора и список всех id его книг, наподобие:
Author_ID Books
1 1;1;
2 2;2;
Сейчас задача решается при помощи следующего запроса:
select Author_ID ,Books = (select ISNULL( convert(varchar,[Author_ID]) + ';', '') from AuthorsInBooks where Author_ID = x.Author_ID for xml path('') ) from (select distinct Author_ID from AuthorsInBooks) as x
Вопросы:
a) какие есть варианты запроса без использования xml?
b) какие есть варианты запроса с использованием CTE вне зависимости от использования / не использования xml?
c) какие ещё вообще варианты решения есть?
Версия сервера - 2014, редакция - Developer Edition.
CLR не предлагать.