Вы можете поворачивать и отменять несколько столбцов с помощью операторов PIVOT
и UNPIVOT
, вам просто нужно знать правильный синтаксис.В вашем случае вы хотите UNPIVOT
.Вы теряете некоторую информацию в том, как вы показываете желаемый результат, и, возможно, это нормально для ваших нужд;в любом случае ниже я включаю столбец, который показывает порядок пар столбцов.(Немного странно, показывая 1
для COL/VAL
и 2
для COL_1/VAL_1
, но я все равно предполагаю, что это не ваши настоящие имена столбцов.) Если вам не нужен столбец ORD
в выходных данныхпросто удалите его из предложения SELECT
.
Примечание - COLUMN
является зарезервированным словом Oracle, оно не может быть именем столбца.Я изменил имена столбцов на C
и V
в выводе.
with
input(id, col, col_1, val, val_1) as (
select 1, 'ABC', 'DEF', 10, 20 from dual union all
select 2, 'GHI', 'JKL', 30, 40 from dual
)
select id, ord, c, v
from input
unpivot ( (c, v) for ord in ((col, val) as 1, (col_1, val_1) as 2))
;
ID ORD C V
---------- ---------- --- ----------
1 1 ABC 10
1 2 DEF 20
2 1 GHI 30
2 2 JKL 40