需求:SQL> select fyear,fseason,fsale from t_test order by fyear,fseason;
FYEAR FSEASON FSALE
---------- ---------- ----------
2012 1 200
2012 2 200
2012 3 300
2012 4 400
2013 1 200
2013 2 300
2013 3 300
需要展现如下形式:
FYEAR FSEASON FSALE
---------- ---------- ----------
2012 1 200
2 200
3 300
4 400
2013 1 200
2 300
3 300
如果年有多行一样,只展现一年的,别的都是空。
看了fuyuncat大师的 “” 博客,我突然明白我的如何解决了。
技巧就是利用rownum来做分组排序去重。
不多说,上代码。
SQL如下:
SQL> select decode(rownum - rn, 0, t.fyear, null) as fyear, fseason, fsale
2 from (select a.*, rn
3 from t_test a,
4 (select fyear, min(rownum) as rn
5 from (select fyear, fseason, fsale
6 from t_test
7 order by fyear, fseason)
8 group by fyear) b
9 where a.fyear = b.fyear
10 order by a.fyear, a.fseason) t;
FYEAR FSEASON FSALE
---------- ---------- ----------
2012 1 200
2 200
3 300
4 400
2013 1 200
2 300
3 300
很精妙的rownum用法,解决困扰我很久的问题。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25027760/viewspace-1062102/,如需转载,请注明出处,否则将追究法律责任。