2009-09-04 16 views
12

Me pregunto cómo podría imprimir un número de fila para la declaración sql donde está usando la orden. Actualmente probé ROWNUM pero, según tengo entendido, funciona solo para el conjunto de resultados sin clasificar.Oracle: Mostrar el número de fila con la cláusula 'order by'

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

Respuesta

28

Además de anidación de la consulta, puede utilizar una función analítica

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 

utilización de funciones analíticas también hace que sea más fácil si desea cambiar cómo se manejan los lazos. Puede reemplazar ROW_NUMBER con RANK o DENSE_RANK.

7

Oh. Parece que ya encontré una solución.

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); 
3

rownum se aplica antes de hacer el pedido, por lo que tiene que volver a escribir su consulta como la siguiente:. seleccione rownum, xxx * a partir de ( a.lg_id SELECT, a.full_name, a.sort_order DE activity_type_lang un donde a.lg_id = 'en' ordena por a.full_name ) xxx;

2

Hola. Me pregunto cómo podría imprimir un número de fila para instrucción sql donde es usando orden. Actualmente probé ROWNUM pero según tengo entendido, funciona solo para conjunto de resultados sin clasificar.

Para ser claro (alguien podría equivocarse). Es funciona (pero no en la forma esperada). El problema es que "adjunta" el ROWNUM antes de ordenar y obtiene sus registros pero no en registros ROWNUM consecutivos. ¿Por qué? Debido

El primer registro que cumpla las donde criterios en una declaración SELECT es rownum dado = 1

Esto es muy buen ejemplo de cómo funciona el mecanismo de selección/orden.

Cuestiones relacionadas