如何将表中多行的记录插入到其他表中的单行(group my ID)?

时间:2013-06-13 06:28:08

标签: oracle plsql group-by

我有一张记录为:

的表格
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列。

2 个答案:

答案 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;