2013-04-10 59 views
0

我有降雨數據的列表使用Oracle 9i中比較2年

SELECT * FROM Rainfall 

COUNTRY   YEAR AMT 
-------------- ---- --- 
Austria   2000 1.1 
Belgium   2000 1.2 
France   2000 1.3 
Ireland   2000 1.4 

France   2001 1.5 
Ireland   2001 1.6 

Austria   2002 1.7 
Belgium   2002 1.8 
France   2002 1.9 

Germany   2003 2.0 
Italy   2003 2.1 

我怎麼會選擇這個顯示連續2年

COUNTRY   YEAR 2001 YEAR 2000 
-------   --------- --------- 
Austria   -   1.1 
Belgium   -   1.2 
France   1.5   1.3 
Ireland   1.6   1.4 

然後,在2002年所有國家 - 2001年

COUNTRY   YEAR 2002 YEAR 2001 
-------   --------- --------- 
Austria   1.7   - 
Belgium   1.8   - 
France   1.9   1.5 
Ireland   -   1.6 

終於2003 - 2002

COUNTRY   YEAR 2003 YEAR 2002 
-------   --------- --------- 
Austria   -   1.7   
Belgium   -   1.8   
France   -   1.9   
Germany   2.0   - 
Italy    2.1   - 

謝謝。

回答

3

2000/2001:

http://www.sqlfiddle.com/#!4/a2907/13 (糾正國家的重複aparition爲葉戈爾指出)

select 
    country, 
    max(case when year=2001 then to_char(amt) else '-' end) as 'YEAR 2001', 
    max(case when year=2000 then to_char(amt) else '-' end) as 'YEAR 2000' 
from 
    Rainfall 
where year in (2000, 2001) 
group by country 
order by country; 

如果你想有一個通用查詢,這將做到這一點,但沒有列名:

with (select 2000 as ref_year from dual) as s 
select 
    country, 
    max(case when year=s.ref_year+1 then to_char(amt) else '-' end) as 'Next YEAR', 
    max(case when year=s.ref_year then to_char(amt) else '-' end) as 'YEAR' 
from 
    Rainfall 
where year in (s.ref_year, s.ref_year + 1) 
group by country 
order by country; 

(你只需要改變的子查詢的ref_year)

+0

怎麼樣從2000 - 2001年的調查,因爲沒有數據的刪除意大利? – 2013-04-10 13:03:30

+0

@EgorSkriptunoff我不明白你的意思。 'where'可以根據需要刪除或添加。 – 2013-04-10 13:22:01

+0

在問題中查看2000-2001所需的結果集。那裏沒有意大利。 – 2013-04-10 13:26:59

4
SELECT * FROM Rainfall 
pivot (max(AMT) for year in (2000, 2001, 2002, 2003)) 
order by 1 

fiddle

+0

問題的標題提到Oracle 9i和'PIVOT'在9i中不可用。 – 2013-04-10 13:30:52

+1

@BrianCamire - 真的。我的答案是針對Oracle 11.這是我的錯。請給我請來。 – 2013-04-10 13:37:06

+0

_Downvote me please_ ROFL :))+1 from our;) – 2013-04-10 13:43:10