Oracle将行转换为列并组合重复行

时间:2015-12-30 09:47:59

标签: sql oracle pivot

我是Oracle DB的新手。我不确定是否可以这样做。基本上我有一个问题:

SELECT location,properties,value FROM table_usa

返回此输出:

Current output

不知何故,我想将纬度和经度转换为自己的列,并将初始的重复行组合在一起。期望的输出:

Desired Output

这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

oracle 11g (及以上)pivot是此任务的最通用的工具。

  

pivot_clause可让您编写旋转的交叉制表查询   行到列,在轮换过程中聚合数据。

<强>来源

 LOCATION   |PROPERTIES |   VALUE  
 -----------|-----------|--------
 Texas      | Latitude  | 21.391 
 Texas      | Longitude | 54.12  
 Detroit    | Latitude  | 24.23  
 Detroit    | Longitude | 54.23  
 New York   | Latitude  | 24.239 
 New York   | Longitude | 55.5   

PIVOT选择

select *
  from (select Location, Properties, Value 
        from table_usa)
pivot(
   max(Value)  
   for Properties in ('Latitude' AS LATITUDE,
                      'Longitude' AS LONGITUDE)
   )
order by LATITUDE;

<强>结果

LOCATION    | LATITUDE  |LONGITUDE
------------|-----------|---------
Texas       | 21.391    |54.12 
Detroit     | 24.23     |54.23            
New York    | 24.239    |55.5         

答案 1 :(得分:1)

在Oracle 11g中,您可以尝试PIVOT(参见http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html)。

在以前的版本中,这应该有效:

select   location,
         max(decode(properties, 'Latitude', value, null)) latitude,
         max(decode(properties, 'Longitude', value, null)) longitude
from     table_usa
group by location