2013-11-27 10 views
23

Ho una semplice istruzione select. Voglio aggiungere una colonna temporanea che numererà le righe nel mio set di risultati. Ho provato questo -Aggiungere un numero di riga al set di risultati di una query SQL

declare @num int 
set @num = 0; 
select t.A, t.B, t.C, (@count + 1) as number 
from tableZ as t 

Assegna il 1 a tutte le righe. Ho provato @count = @count + 1 e non ha funzionato. Come faccio a fare questa cosa in modo semplice?

grazie.

+0

Come si desidera incrementare il numero di riga? Arbitrario? La tua query non ha un ordine BY, quindi devi definire cosa ti aspetti che l'ordine sia. –

+0

@AaronBertrand - Ho solo bisogno che le mie righe siano numerate. L'ordine non è davvero necessario. Questo risponde alla tua domanda ? –

+0

Quindi stai bene con l'ordine che viene applicato in modo casuale e i risultati vengono sputati alla tua query in un ordine incoerente ogni volta? –

risposta

34

Lo schema tipico potrebbe essere il seguente, ma è necessario definire in realtà come deve essere applicato l'ordinamento (dal momento che una tabella è, per definizione, un sacchetto non ordinata di righe):

SELECT t.A, t.B, t.C, number = ROW_NUMBER() OVER (ORDER BY t.A) 
    FROM dbo.tableZ AS t 
    ORDER BY t.A; 

Non so cosa le variabili nella tua domanda dovrebbero rappresentare (non corrispondono).

39
SELECT 
    t.A, 
    t.B, 
    t.C, 
    ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS number 
FROM tableZ AS t 

Vedi esempio di lavoro at SQLFiddle

Naturalmente, si consiglia di definire l'ordine row-numerazione - in tal caso, basta scambiare OVER (ORDER BY (SELECT 1)) per, ad esempio, OVER (ORDER BY t.C), come in un normale ORDER BY clausola.

Problemi correlati