2011-01-06 19 views
7

vorrei creare una dichiarazione query di selezione con autonumber .. come ..autonumber in select in SQL Server

select * from tbl1 

mi darà tutto da tavolo.

Il risultato mi piacerebbe ottenere è ..

1   data 
2   data 
3   data 

Così come posso fare per ottenere che il numero .. ??

come ..

select (for autonumber), * from tbl1 

i dati in mio tavolo saranno ripetuti (non ci sono dati unica)

risposta

19

Uso ROW_NUMBER:

SELECT ROW_NUMBER() OVER (ORDER BY col1) AS rn, * FROM tbl1 

Per filtrare i risultati in base al numero di riga uso this:

SELECT * FROM 
(
    SELECT ROW_NUMBER() OVER (ORDER BY col1) AS rn, * FROM tbl1 
) T1 
WHERE rn = 5 
+0

yea .. questa è la risposta corretta. Mi piacerebbe fare sth come .. SELEZIONARE ROW_NUMBER() OVER (ORDER BY col1) AS rn, * FROM tbl1 dove rn = 5; Apparentemente non funziona così .. qualche soluzione per questo? – william

+1

@william: è necessario generare il numero di riga in una tabella derivata e filtrare in una selezione esterna. Aggiornerò la mia risposta per dimostrarlo –

+0

Posso sembrare stupido per fare questa domanda. Ma chi è T1? E non posso mettere "ordine per" nell'istruzione select interna, è normale? – william

0

Potrebbe essere necessario trovare l'offset dell'identità, ad es. ultimo ID di seconda tabella:

DECLARE @lastAutoID int 
SET @lastAutoID = abs((Select max(convert(float,[ConsID])) 
FROM [RXPIPEDB]...[consumption])) 

Quindi utilizzare ROW_NUMBER():