2013-05-15 4 views

risposta

95

Se si tratta di MySql si può provare

SELECT @n := @n + 1 n, 
     first_name, 
     last_name 
    FROM table1, (SELECT @n := 0) m 
ORDER BY first_name, last_name 

SQLFiddle

E per SQLServer

SELECT row_number() OVER (ORDER BY first_name, last_name) n, 
     first_name, 
     last_name 
    FROM table1 

SQLFiddle

+0

grazie mille, è stato fatto. –

+0

Cosa succede se voglio selezionare tutte le colonne da 'table1' invece' first_name' e 'last_name', come posso fare riferimento a tutti? Provando 'SELECT @n: = @n + 1 n, *' non funziona – Wronski

+0

La risposta è 'SELECT @n: = @n + 1 n, table1. *' – Wronski

17

: ecco per SQL server, Oracle, PostgreSQL quali funzioni della finestra di supporto.

SELECT ROW_NUMBER() OVER (ORDER BY first_name, last_name) Sequence_no, 
     first_name, 
     last_name 
FROM tableName 
+0

grazie, il tuo codice è stato lavorato molto bene –

+0

Grazie, questa risposta mi ha aiutato per Oracle DB. –

+0

Grazie mille John – Murali

-1
DECLARE @id INT 
SET @id = 0 
UPDATE cartemp 
SET @id = CarmasterID = @id + 1 
GO 
-2

Nel caso in cui si hanno alcun valore divisorio naturale e vogliono solo un numero ordinata indipendentemente della partizione che si può solo fare un row_number su una costante, nella seguendo l'esempio ho appena usato 'X'. Spero che questo aiuti qualcuno

select 
    ROW_NUMBER() OVER(PARTITION BY num ORDER BY col1) as aliascol1, 
    period_next_id, period_name_long 
from 
(
    select distinct col1, period_name_long, 'X' as num 
    from {TABLE} 
) as x