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