2015-12-30 34 views
2

我是Oracle DB的新手。我不确定是否可以这样做。基本上我有一个查询:Oracle将行转换为列和组合重复行

SELECT location,properties,value FROM table_usa 

返回此输出:

Current output

不知怎的,我想经纬度转化为自己列,还结合初始重复的行。所需的输出:

Desired Output

这甚至可能吗?

+0

答案是否解决了你的问题? – klashxx

回答

2

oracle11克(及以上)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   
+0

是的,这实际上解决了我的问题。谢谢!我还有另一个问题。假设我有一个情况(非常罕见,但它发生),我的价值在于: 'Texas |警长|阿布鲁齐' '德克萨斯州|警长| NULL' '底特律|警长| Scofield' '底特律|警长| NULL' 我该如何得到它: 'Texas |阿布鲁齐' '底特律| Scofield' 如果我使用Max,我将得到Texas的NULL,如果我使用Min,我将为Scofield得到NULL。处理这种情况有什么窍门吗? – nyamuk91

+0

嗨,随着需求的变化,您应该打开一个新的问题,发布您当前的数据和代码 – klashxx