请问如何排序能达到这样的要求?急...

ryrx 2013-05-23 10:05:21
有以下数据表:
字段1 字段2 字段3
15 tom dog
12 jack cat
23 tom dog
24 alex pig
33 hunk bird

要求按字段1排序,并给出排序编号,但是字段2和字段3一样的情况下,编号要一样,类似下面的:

编号 字段1 字段2 字段3
1 12 jack cat
2 15 tom dog
2 23 tom dog
3 24 alex pig
4 33 hunk bird

请问sql文怎么写呀?用类似dense_rank() over(order by ...)可以做到吗?
...全文
238 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kilior 2013-05-24
  • 打赏
  • 举报
回复
select t2.ord, t1.* from 表 t1, ( select rownum as ord , 字段2 from ( select distinct 字段2 from 表 order by 字段2 ) ) t2 where t1.字段2 = t2.字段2 order by ord
u010412956 2013-05-23
  • 打赏
  • 举报
回复
with t as
 (select 15 a, 'tom' b, 'dog' c
    from dual
  union all
  select 12, 'jack', 'cat'
    from dual
  union all
  select 23, 'tom', 'dog'
    from dual
  union all
  select 24, 'alex', 'pig'
    from dual
  union all
  select 33, 'hunk', 'bird' from dual)
select dense_rank() over(order by nvl(d, a)) seq, a, b, c
  from (select t.*, lag(a) over(partition by b order by rownum) d from t) t;
u010412956 2013-05-23
  • 打赏
  • 举报
回复
引用 2 楼 ryrx 的回复:
谢谢楼上给出的sql,的确可以做到。 但是实际运用上,我的情况可能更复杂一点,即字段2和字段3一样的情况可能不止两条记录,例如有N条记录,也可能不止一组,例如有tom+dog为一组,还有hunk+bird为一组的情况,所以上述这条sql语句就不行了,请问能不能改进一下符合这个要求的?
with t as
 (select 15 a, 'tom' b, 'dog' c
    from dual
  union all
  select 12, 'jack', 'cat'
    from dual
  union all
  select 23, 'tom', 'dog'
    from dual
  union all
  select 24, 'alex', 'pig'
    from dual
  union all
  select 33, 'hunk', 'bird'
    from dual
  union all
  select 34, 'hunk', 'bird'
    from dual
  union all
  select 32, 'hunk', 'bird'
    from dual
  union all
  select 13 a, 'tom' b, 'dog' c from dual)
select dense_rank() over(order by d) seq, a, b, c
  from (select t.*, last_value(a) over(order by b) d from t) t;
ryrx 2013-05-23
  • 打赏
  • 举报
回复
谢谢楼上给出的sql,的确可以做到。 但是实际运用上,我的情况可能更复杂一点,即字段2和字段3一样的情况可能不止两条记录,例如有N条记录,也可能不止一组,例如有tom+dog为一组,还有hunk+bird为一组的情况,所以上述这条sql语句就不行了,请问能不能改进一下符合这个要求的?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧