oracle rownum用法排序,利用rownum分组排序去重

需求: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/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值