Это, вероятно, лучше всего делается на стороне клиента на языке программирования по вашему выбору.
Вам необходимо знать имена разделов заранее, чтобы превратить их в имена столбцов.
Обновленный ответ для Oracle 11g (с использованием new PIVOT operator):
SELECT * FROM
(SELECT section_name, section_value FROM tbl_sections)
PIVOT
MAX(section_value)
FOR (section_name) IN ('sectionI', 'sectionII', 'sectionIII')
Для более старых версий, вы могли бы сделать некоторые Самосоединения:
WITH
SELECT section_name, section_value FROM tbl_sections
AS
data
SELECT
one.section_value 'sectionI',
two.section_value 'sectionII',
three.section_value 'sectionIII'
FROM
select selection_value from data where section_name = 'sectionI' one
CROSS JOIN
select selection_value from data where section_name = 'sectionII' two
CROSS JOIN
select selection_value from data where section_name = 'sectionIII' three
или же использовать MAX трюк и «агрегат»:
SELECT
MAX(DECODE(section_name, 'sectionI', section_value, '')) 'sectionI',
MAX(DECODE(section_name, 'sectionII', section_value, '')) 'sectionII',
MAX(DECODE(section_name, 'sectionIII', section_value, '')) 'sectionIII'
FROM tbl_sections
Для какой версии Oracle? –
Что произойдет, если у вас есть несколько строк с именем раздела 'sectionI', но другое значение? Вы показываете другую строку? Если да, то что должно отображаться в разделахII и sectionIII? Куда идут пустые столбцы, если имеется несоответствующее количество записей для каждого имени раздела? В общем, то, что вы пытаетесь сделать, не очень четко определено. – gfortune