利用rownum分組排序去重

wenhual43發表於2013-12-04
需求: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部落格 ” ,連結:http://blog.itpub.net/25027760/viewspace-1062102/,如需轉載,請註明出處,否則將追究法律責任。

相關文章