Транспонировать стол - PullRequest
0 голосов
/ 11 марта 2012

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

A
--
1
2
3
4
5

Можно ли как-нибудь преобразовать таблицу в

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

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

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

Если вы не знаете, сколько столбцов ожидать, то, возможно, используйте 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
0 голосов
/ 12 марта 2012
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. Я не знаю, сколько столбцов вы хотите получить в результате, но я уверен, что это даст вам подсказку, по какому пути вы должны действовать.

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

OUTPUT

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

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

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