Вам нужно UNPIVOT
.
select * from unpivotdemo;
INDICE VALEUR1 VALEUR2 VALEUR3 VALEUR4 VALEUR5 VALEUR6 VALEUR7 VALEUR8 VALEUR9 VALEUR10
---------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
1 Semaine courante Semaine precedente Semaine -2
2 03/10/18 184 115
select indice, valeur, description
from unpivotdemo
unpivot
( description for valeur in
( valeur1
, valeur2
, valeur3
, valeur4
, valeur5
, valeur6
, valeur7
, valeur8
, valeur9
, valeur10 ) );
INDICE VALEUR DESCRIPTION
---------- -------- --------------------
1 VALEUR1 Semaine courante
1 VALEUR2 Semaine precedente
1 VALEUR3 Semaine -2
2 VALEUR1 03/10/18
2 VALEUR2 184
2 VALEUR3 115
6 rows selected
По умолчанию нулевые значения исключены.Вы можете включить их, добавив include nulls
после ключевого слова unpivot
.
Чтобы включить INDICE
в столбец VALEUR
, вы можете переместить его из списка select
в список unpivot ... in
- однако вам также необходимо преобразовать тип данных в соответствие:
select valeur, description
from ( select to_char(indice) as indice
, valeur1, valeur2, valeur3, valeur4, valeur5, valeur6, valeur7, valeur8, valeur9, valeur10
from unpivotdemo d )
unpivot include nulls
( description for valeur in
( indice
, valeur1
, valeur2
, valeur3
, valeur4
, valeur5
, valeur6
, valeur7
, valeur8
, valeur9
, valeur10 ) );
VALEUR DESCRIPTION
-------- ----------------------------------------
INDICE 1
VALEUR1 Semaine courante
VALEUR2 Semaine precedente
VALEUR3 Semaine -2
VALEUR4
VALEUR5
VALEUR6
VALEUR7
VALEUR8
VALEUR9
VALEUR10
INDICE 2
VALEUR1 03/10/18
VALEUR2 184
VALEUR3 115
VALEUR4
VALEUR5
VALEUR6
VALEUR7
VALEUR8
VALEUR9
VALEUR10
22 rows selected
Редактировать следующий расширенный вопрос:
Чтобы объединить значения в строки, разделенные запятыми, вы можете использовать LISTAGG
:
select valeur, description
from ( select listagg(indice, ',') within group (order by indice) as indice
, listagg(valeur1, ',') within group (order by indice) as valeur1
, listagg(valeur2, ',') within group (order by indice) as valeur2
, listagg(valeur3, ',') within group (order by indice) as valeur3
, listagg(valeur4, ',') within group (order by indice) as valeur4
, listagg(valeur5, ',') within group (order by indice) as valeur5
, listagg(valeur6, ',') within group (order by indice) as valeur6
, listagg(valeur7, ',') within group (order by indice) as valeur7
, listagg(valeur8, ',') within group (order by indice) as valeur8
, listagg(valeur9, ',') within group (order by indice) as valeur9
, listagg(valeur10, ',') within group (order by indice) as valeur10
from unpivotdemo )
unpivot include nulls
( description for valeur in
( indice
, valeur1
, valeur2
, valeur3
, valeur4
, valeur5
, valeur6
, valeur7
, valeur8
, valeur9
, valeur10 ) );
VALEUR DESCRIPTION
-------- --------------------------------------------------------------------------------
INDICE 1,2
VALEUR1 Semaine courante,03/10/18
VALEUR2 Semaine precedente,184
VALEUR3 Semaine -2,115
VALEUR4
VALEUR5
VALEUR6
VALEUR7
VALEUR8
VALEUR9
VALEUR10
11 rows selected
Обратите внимание, что строки, разделенные запятыми, могут быть длинными, и по умолчанию вы ограничены 4000 символами, которые могут составлять около 200 строк на основе ваших данных выборки.