ITPub博客

首页 > 数据库 > Oracle > 利用rownum分组排序去重

利用rownum分组排序去重

原创 Oracle 作者:wenhual43 时间:2013-12-04 10:00:00 0 删除 编辑
需求: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大师的 “Oracle中ROWNUM的使用技巧” 博客,我突然明白我的如何解决了。
技巧就是利用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博客 ” ,链接:https://blog.itpub.net/25027760/viewspace-1062102/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle分页的处理
请登录后发表评论 登录
全部评论

注册时间:2011-08-03

  • 博文量
    32
  • 访问量
    130411