我有一张记录为:
的表格ID |NAME |FULLNAME
ID1 |John |John S
ID1 |Tom |Tom S
ID2 |Tin |Tin J
ID2 |Jim |Jim B
ID2 |Kethy |Kethy T
ID3 |Neo |Neo L
我想创建一个新表并插入如下记录:
ID |NAME1 |FULLNAME1 |NAME2 |FULLNAME2 |NAME3 |FULLNAME3
ID1 |John |John S |Tom |Tom S
ID2 |Tin |Tin J |Jim |Jim B |Kethy |Kethy T
ID3 |Neo |Neo L
新表的结构固定为7列。
答案 0 :(得分:1)
请尝试以下声明:
CREATE TABLE new_table AS
SELECT name1.id
, name1.name AS name1
, name1.fullname AS fullname1
, name2.name AS name2
, name2.fullname AS fullname2
, name3.name AS name3
, name3.fullname AS fullname3
FROM ( SELECT *
FROM ( SELECT id, name, fullname
, rank() over ( partition by id order by fullname asc) as rank
FROM old_table )
WHERE rank = 1) name1
, ( SELECT *
FROM ( SELECT id, name, fullname
, rank() over ( partition by id order by fullname asc) as rank
FROM old_table )
WHERE rank = 2) name2
, ( SELECT *
FROM ( SELECT id, name, fullname
, rank() over ( partition by id order by fullname asc) as rank
FROM old_table )
WHERE rank = 3) name3
WHERE name1.id = name2.id (+)
AND name1.id = name3.id (+)
ORDER BY name1.id ASC;
可能有一些方法可以某种方式对其进行优化,但它似乎会产生您正在寻找的结果。
答案 1 :(得分:0)
如果数据库版本为11g或更高,则可以使用pivot功能,该功能可以将行传输到列中。 示例:http://www.dba-oracle.com/t_pivot_examples.htm
确定您的数据库版本:How can I confirm a database is Oracle & what version it is using SQL?
select * from v$version;