使用sql oracle转换数据

使用sql oracle转换数据,sql,oracle11g,Sql,Oracle11g,我在表格中有以下数据 +---------+-----+----------+ | Zip_ cd | id | assignmt.| |---------+-----+----------+ | 1812 | 777 | S | | 1812 | 111 | P | | 1451 | 878 | S | | 55 | 45 | x | | 55 | 646 | T | | 55

我在表格中有以下数据

+---------+-----+----------+
| Zip_ cd | id  | assignmt.|
|---------+-----+----------+
| 1812    | 777 | S        |
| 1812    | 111 | P        |
| 1451    | 878 | S        | 
| 55      | 45  | x        |  
| 55      | 646 | T        |
| 55      | 455 | Z        |
+---------+-----+----------+
我想把它转置如下

+---------+-----+----+---------+-----+----------+---------+-----+----------+
| Zip_ cd | id  | ass| Zip_cd1 | id1 |assignmt1 | Zip_cd2 | id2 |assignmt3 |
+---------+-----+----+---------+-----+----------+---------+-----+----------+
| 1812    | 777 | S  | 1812    | 111 | P        | 1812    | 111 | P        |
| 1451    | 878 | S  |         |     |          |         |     |          |  
| 55      | 45  | X  | 55      | 646 | T        |  55     | 455 | Z        |
+---------+-----+----------+---------+----------+---------+-----+----------+

所以,我基本上想根据邮政编码进行转置。如果两行具有相同的邮政编码,则其需要位于单行中。

使用透视功能的另一个查询:

select *
  from table_name
  pivot ( max(id) id
        , max(assignmt) assignmt
    FOR assignmt IN ('S' S,
                     'P' P));

+---------+-------+------------+--------+------------+
| ZIP_ CD | S_ID  | S_ASSIGNMT.| P_ID   | P_ASSIGNMT.|
+---------+-------+------------+--------+------------+
| 1812    | 777   | S          | 111    | P          |
| 1451    | 878   | S          | NULL   | NULL       |
+---------+-------+------------+--------+------------+

您试图用从该查询中获得的数据实现什么?您的请求意味着您将需要可变数量的列,这并不是最简单的方法(如果可能的话,我实际上不知道如何构造这样的查询)