您没有说明您使用的是什么版本的 Oracle,但如果您使用的是 Oracle 11g+,那么您可以使用以下PIVOT
函数将此数据转换为列:
select id,
C1,
C2,
column_data
from
(
select id, value, column_data,
row_number() over(partition by id order by id, value) rn
from yourtable
)
pivot
(
max(value)
for rn in ('1' as C1, '2' as C2)
)
order by id
请参阅SQL Fiddle with Demo。
在 Oracle 11g 之前,您可以使用带有CASE
表达式的聚合函数将行转换为列:
select id,
max(case when rn = 1 then value end) C1,
max(case when rn = 2 then value end) C2,
column_data
from
(
select id, value, column_data,
row_number() over(partition by id order by id, value) rn
from yourtable
)
group by id, column_data
order by id
请参阅带有演示的 SQL Fiddle
两个查询的结果是:
| ID | C1 | C2 | COLUMN_DATA |
------------------------------
| 1 | a | b | DATA1 |
| 2 | c | x | DATA2 |
| 3 | y | z | DATA3 |