В некотором контексте: у меня есть БД Oracle с публикациями. Я пытаюсь создать файлы XML, содержащие все публикации, созданные или отредактированные определенным человеком. Однако XML также должен содержать соавторов (и множество другой информации, которая не вызывает никаких проблем).Как создать записи публикации одной строки с несколькими авторами в SQL для создания XML?
Соответствующий код:
select NAME_FIRST_NAME,
NAME_LAST_NAME,
LIST_INDEX,
PUBLICATION_ID
from CLASSIFIED_AUTHOR_ASSOC CAA
join PUBLICATION PUB
on CAA.PUBLICATION_ID = PUB.ID
where CAA.PUBLICATION_ID IN
(select PUBLICATION_ID
from CLASSIFIED_AUTHOR_ASSOC
where PERSON_ID = '127746')
order by CAA.PUBLICATION_ID, CAA.LIST_INDEX ASC
Пример вывода:
Боб Джонсон 0 996822
Боб Джонсон 0 962544
Боб Джонсон 0 455211
Сью Хопкинс 1 455211
Значение list_index важно, поскольку оно указывает порядок авторов, что имеет значение. Проблема в том, что у меня есть несколько строк для одной публикации.
Я искал функции поворота, но все они ориентированы на числовые значения и подразумевают, что вы заранее знаете, сколько строк вы закончите (записи в моем наборе данных имеют что-то от 1 до 30 авторов) , Мой вопрос: как мне лучше всего подойти к этой проблеме? Составляю ли я авторов в одном столбце? В этом случае я понятия не имею, как получить их в отдельных xml-элементах впоследствии. Или есть другой способ добиться того, что я хочу сделать?
Любые указатели в правильном направлении были бы очень признательны!
Я нашел следующее частично решает мою проблему: 'select мин (случай, когда LIST_INDEX 0, то NAME_FIRST_NAME конец) AS "первый автор первого имени", мин (случай, когда LIST_INDEX 0, то NAME_LAST_NAME конец) AS «First авторская фамилия ", мин (случай LIST_INDEX, когда 1 затем NAME_FIRST_NAME конец) AS" Второе имя автора ", min (регистр LIST_INDEX, когда 1 затем NAME_LAST_NAME заканчивается) AS" Второе имя автора "и т. д. Не идеальный , так как мне приходится жестко кодировать 60 строк для размещения 30 возможных авторов, и в этом случае большинство столбцов будут «null». –