Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Vaskrol Member Откуда: Сообщений: 3 |
Всем привет. У меня возникла задача, которую я не знаю, как решить. И не уверен, возможно ли. Упрощенно: Есть таблица Article_Person с полями ArticleID и PersonID, где ArticleID - ID книги, PersonID - ID автора книги и внешний ключ для таблицы Person. ArticleID - не уникальный ключ, у одной книги может быть несколько авторов. И есть таблица Person с информацией об авторах, в ней есть поля PersonID и FullName. Вот такой запрос: select ap.ArticleID, p.PersonID, p.FullName Выдаёт вот такие данные: 9921 9286 Галина Н. Кравец То есть у первой книги 3 автора, у второй - один. Моя задача - сделать так, чтобы получить некое подобие Group By ap.ArticleID, но чтобы данные об авторах ( p.PersonID, p.FullName ) выстроить в отдельные столбцы справа от ID. То есть, чтобы получить вот это: 9921 9286 Галина Н. Кравец 9287 Юрий Н. Кравец 11432 и другие Выходит, что в первой строке получается 7 столбцов, а во второй - 5. Для меньшего числа авторов правые столбцы просто останутся пустыми. Мне не приходит в голову, как это можно сделать. Кто-нибудь может подсказать, в какую вообще сторону стоит посмотреть в этом случае? Заранее спасибо. |
17 апр 16, 20:21 [19069334] Ответить | Цитировать Сообщить модератору |
Vaskrol Member Откуда: Сообщений: 3 |
Прошу прощения, я не вижу кнопки "Редактировать" Вот тут:
у второй книги 2 автора, а не один. |
||
17 апр 16, 20:24 [19069350] Ответить | Цитировать Сообщить модератору |
iljy Member Откуда: Сообщений: 8711 |
Vaskrol, Если можно взять некое максимальное число столбцов (3,5,7, 100 - не важно, главное. что фиксированное), то подойдет обычный ROW_NUMBER+PIVOT. Если достаточно собрать всех авторов в одну строку через запятую, то можно обойтись подзапросом с FOR XML PATH. Если же надо делать произвольное число полей, то только динамика, формировать тот же запрос, что и первом случае, но динамически собирая список в PIVOT. |
17 апр 16, 20:31 [19069362] Ответить | Цитировать Сообщить модератору |
Mike_za Member Откуда: Москва Сообщений: 1176 |
А зачем вам это нужно? Осмелюсь предположить, что Вы решаете клиентскую задачу средствами сервера? |
18 апр 16, 00:06 [19069846] Ответить | Цитировать Сообщить модератору |
Vaskrol Member Откуда: Сообщений: 3 |
Во! Это то, что нужно, большое спасибо. Максимальное число авторов ограничено тремя.
Да, вы правы. Сам бы я не стал бы заниматься таким идиотизмом. И на всякий случай, для тех, кто придёт сюда из Гугла, привожу запрос, реализующий сабж. Я его сделал на другой БД, которая была под рукой в данный момент. select VideoMaterialID, [1] as Episode1, [2] as Episode2, [3] as Episode3 |
||||
18 апр 16, 12:12 [19071203] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |