2013-05-15 13 views
50

Zum Beispiel habe ich eine Tabelle mit zwei Spalten, first_name und last_name mit diesen WertenWie Autoinkrement-Feld in Auswahlabfrage

Ali   Khani 
Elizabette Amini 
Britney  Spears 
,... 

Ich möchte schreiben, um eine select Abfrage, die eine Tabelle wie folgt zu erzeugen generieren:

1  Ali   Khani 
2  Elizabette Amini 
3  Britney  Spears 
,... 

Danke für Ihre Hilfe.

+1

Welche RDBMS verwenden Sie? – peterm

Antwort

95

Wenn es MySql ist, können Sie versuchen

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

SQLFiddle

Und für SQLServer

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

SQLFiddle

+0

vielen dank, das hat funktioniert. –

+0

Was ist, wenn ich alle Spalten von 'table1' anstelle von' first_name' und 'last_name' auswählen möchte, wie kann ich auf alle verweisen? Der Versuch 'SELECT @n: = @n + 1 n, *' funktioniert nicht – Wronski

+0

Die Antwort ist 'SELECT @n: = @n + 1 n, table1. *' – Wronski

17

hier ist für SQL server, Oracle, PostgreSQL, die Fensterfunktionen unterstützen.

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

danke, dein Code hat sehr gut funktioniert –

+0

Danke, diese Antwort hat mir bei Oracle DB geholfen. –

+0

Vielen Dank John – Murali

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

Im Fall haben Sie keine natürlichen Wert Partition und wollen einfach nur eine geordnete Zahl unabhängig von der Partition können Sie nur eine row_number über einen konstanten tun, in der folgendes Beispiel habe ich gerade 'X' verwendet. Hoffe, das hilft jemandem

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 
Verwandte Themen