2013-04-10 72 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