2015-12-30 62 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