2012-03-11 2 views
0

В моей базе данных у меня есть таблица, которая имеет столбец А и соответствующие значения:Транспонирование таблицы

A 
-- 
1 
2 
3 
4 
5 

Есть ли способ, что я могу преобразовать таблицу в

A|1|2|3|4|5| 

Я пробовал использовать ключевое слово PIVOT, но я не могу получить результат.

+0

, что вы пытались с 'PIVOT' ключевого слова и что вы получите? –

+1

@S. Vikneshwar - Знаете ли вы, сколько столбцов вы хотите получить? То есть, вы всегда хотите получить 6 столбцов? Или вы хотите, чтобы количество столбцов менялось в зависимости от количества строк в таблице? –

+0

Не уверен, если это поможет вам инлайн 'выбрать * из ( выберите«а»ColName, 1 как от двойного ) ** Вкладка ** стержень ( макс (а) для а (1,2 , 3,4,5,6) ) ' –

ответ

0
create table temp2(a integer); 
insert into temp2 values(1); 
insert into temp2 values(2); 
insert into temp2 values(3); 
insert into temp2 values(4); 

Ваше требование не ясно, но я попытался это с UNPIVOT .I ДНТ знаю, сколько столбцов вы хотите в вашем результате, но я уверен, что это даст вам намек на какой путь вам нужно продолжить.

SELECT 
    "Key", 
    wm_concat(value) 
FROM Temp2 
UNPIVOT (
    value FOR "Key" IN (a) 
) 

ВЫВОД

Key  WM_CONCAT(VALUE) 
-------------------------- 
A   1,2,4,3 

Если вы удалите функцию wm_concat, то это даст ниже выход.

Key VALUE 
-------------------- 
A  1 
A  2 
A  4 
A  3 
--------------------- 
0

Если вы не знаете, сколько столбцов ожидать, то, возможно, использовать XMLAGG.
Это не даст вам столбцы, а элемент xml для каждой строки. После этого вы можете извлечь каждый элемент в столбец.
взгляд на этот пример:

with t as (select xmlagg(xmlelement("E", a)) a_xml from your_table) 
select rtrim(extract(a_xml, 'E[1]/text()')), 
     rtrim(extract(a_xml, 'E[2]/text()')), 
     rtrim(extract(a_xml, 'E[3]/text()')), 
     rtrim(extract(a_xml, 'E[4]/text()')), 
     rtrim(extract(a_xml, 'E[5]/text()')) 
from t 
Смежные вопросы