2013-11-27 2 views
23

Ich habe eine einfache Select-Anweisung. Ich möchte eine temporäre Spalte hinzufügen, die die Zeilen in meiner Ergebnismenge nummeriert. Ich habe das versucht -Fügen Sie der Ergebnismenge einer SQL-Abfrage eine Zeilennummer hinzu

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

Es weist allen Zeilen die 1 zu. Ich habe versucht @count = @count + 1 und es hat nicht funktioniert. Wie mache ich das Ding auf eine einfache Art und Weise?

danke.

+0

Wie soll die Zeilennummer erhöht werden? Willkürlich? Ihre Abfrage hat kein ORDER BY. Sie müssen also definieren, was Sie von der Bestellung erwarten. –

+0

@AaronBertrand - Ich brauche nur meine Zeilen zu nummerieren. Bestellung ist nicht wirklich notwendig. Beantwortet das deine Frage ? –

+0

Sie sind damit einverstanden, dass die Reihenfolge zufällig angewendet wird und die Ergebnisse jedes Mal in einer inkonsistenten Reihenfolge an Ihre Anfrage ausgegeben werden? –

Antwort

34

wäre Das typische Muster wie folgt, aber Sie müssen tatsächlich definieren, wie die Reihenfolge angewendet werden sollte (da eine Tabelle ist per Definition, eine ungeordnete Tasche von Zeilen):

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

nicht sicher, was die Variablen in Ihrer Frage sollen darstellen (sie passen nicht zusammen).

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

Siehe Beispiel at SQLFiddle

Natürlich arbeiten, sollten Sie die Zeilennummerierung definieren, um - wenn ja, tauschen nur OVER (ORDER BY (SELECT 1)) für beispielsweise OVER (ORDER BY t.C), wie in einer normalen ORDER BY Klausel.