2009-09-04 3 views
12

Mi chiedo come è possibile stampare un numero di riga per l'istruzione sql dove si sta utilizzando l'ordine. Attualmente ho provato ROWNUM ma come ho capito funziona solo per set di risultati non ordinati.Oracle: Visualizza il numero di riga con la clausola '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

risposta

28

Oltre alla nidificazione della query, è possibile utilizzare una funzione analitica

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 

Utilizzando funzioni analitiche rende anche più facile se si vuole cambiare il modo i legami vengono gestiti. È possibile sostituire ROW_NUMBER con RANK o DENSE_RANK.

7

Oh. Sembra che abbia già trovato una soluzione.

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 viene applicata prima di ordinare, in modo da avere a riscrivere la query in questo modo:. select rownum, xxx * da ( SELEZIONA a.lg_id, a.full_name, a.sort_order DA activity_type_lang un dove a.lg_id = 'en' order by a.full_name ) xxx;

2

Ciao. Mi chiedo come è possibile stampare un numero di riga per l'istruzione sql dove è utilizzando l'ordine. Attualmente ho provato ROWNUM ma, a quanto ho capito, funziona solo per il set di risultati non ordinati .

Per essere chiari (qualcuno potrebbe sbagliare). It funziona come (ma non nel modo previsto). Il problema è che "collega" il ROWNUM prima dell'ordinamento e ottieni i tuoi record ma non in record ROWNUM consecutivi. Perché? Perché

Il primo record che soddisfa il cui criteri in un'istruzione SELECT è dato rownum = 1

Questo è veramente buono esempio come funziona il meccanismo di selezione/ordine.