2012-02-06 4 views
-1

мне нужно поворачивать значение строки в столбце - например:SQL: Включение строк в столбцах

SELECT s.section_name, 
     s.section_value 
    FROM tbl_sections s 

эти выходы:

section_name section_value 
----------------------------- 
sectionI  One 
sectionII  Two 
sectionIII  Three 

требуемый выход:

sectionI  sectionII  sectionIII 
----------------------------------------- 
One   Two   Three 
+0

Для какой версии Oracle? –

+1

Что произойдет, если у вас есть несколько строк с именем раздела 'sectionI', но другое значение? Вы показываете другую строку? Если да, то что должно отображаться в разделахII и sectionIII? Куда идут пустые столбцы, если имеется несоответствующее количество записей для каждого имени раздела? В общем, то, что вы пытаетесь сделать, не очень четко определено. – gfortune

ответ

6

Это, вероятно, лучше всего делается на стороне клиента на языке программирования по вашему выбору.

Вам необходимо знать имена разделов заранее, чтобы превратить их в имена столбцов.

Обновленный ответ для 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 
+0

Привет, спасибо за ваш ответ, есть ли способ, который мы не знаем о названии раздела и превратимся в столбцы? – Ianthe

+0

Это собирается создать довольно пугающий крест продукта, не так ли? @sprenna No. – gfortune

+1

Нет. Только с SQL. Имена таблиц, имена столбцов и т. Д. Должны быть известны до запуска запроса. Может быть, с родным динамическим SQL через PL/SQL. Но это эквивалентно тому, чтобы делать это «на стороне клиента на языке программирования по вашему выбору». – Thilo

Смежные вопросы