我是Oracle DB的新手。我不確定是否可以這樣做。基本上我有一個查詢:Oracle將行轉換爲列和組合重複行
SELECT location,properties,value FROM table_usa
返回此輸出:
不知怎的,我想經緯度轉化爲自己列,還結合初始重複的行。所需的輸出:
這甚至可能嗎?
我是Oracle DB的新手。我不確定是否可以這樣做。基本上我有一個查詢:Oracle將行轉換爲列和組合重複行
SELECT location,properties,value FROM table_usa
返回此輸出:
不知怎的,我想經緯度轉化爲自己列,還結合初始重複的行。所需的輸出:
這甚至可能嗎?
在oracle
11克(及以上)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
在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
答案是否解決了你的問題? – klashxx