Oracle:使用“order by”子句显示行号

时间:2009-09-04 08:00:23

标签: sql oracle

我想知道如何为sql语句使用order打印行号。 目前我尝试ROWNUM,但据我所知它只适用于未排序的结果集。

SELECT rownum, a.lg_id, a.full_name, a.sort_order
  FROM activity_type_lang a
  where a.lg_id = 'en'
  order by a.full_name;

TIA

4 个答案:

答案 0 :(得分:29)

除了嵌套查询外,您还可以使用分析函数

SELECT row_number() OVER (ORDER BY a.full_name),
       lg_id,
       full_name,
       sort_order
  FROM activity_type_lang a
 WHERE a.lg_id = 'en'
 ORDER BY a.full_name

如果要更改关系的处理方式,使用分析函数也会更容易。您可以使用RANK或ROW_NUMBER替换DENSE_RANK

答案 1 :(得分:7)

喔。似乎我已经找到了解决方案。

    Select rownum, lg_id, full_name, sort_order from 
(SELECT a.lg_id, a.full_name, a.sort_order
      FROM activity_type_lang a
      where a.lg_id = 'en'
      order by a.full_name);

答案 2 :(得分:3)

rownum在订购之前应用,因此您必须像这样重写您的查询: 选择rownum,xxx。* from( SELECT a.lg_id,a.full_name,a.sort_order   FROM activity_type_lang a   其中a.lg_id ='en'   按a.full_name排序 )xxx;

答案 3 :(得分:2)

  

您好。我想知道怎么打印一个   sql语句的行号在哪里   使用订单。目前我试过ROWNUM   但据我所知它只适用于   未排序的结果集。

要明确(有人可能会弄错)。它 工作(但不是你想象的那样)。它的问题在于它在排序之前“附加”ROWNUM 并且您获得了记录但不是连续的ROWNUM记录。为什么?因为

  

满足哪里的第一条记录   select语句中的条件是   给出rownum = 1

这是选择/订单机制如何工作的非常好的例子。