2013-11-27 32 views
23

Mam proste polecenie select. Chcę dodać tymczasową kolumnę, która będzie numerować wiersze w moim zestawie wyników. Próbowałem tego -Dodaj numer wiersza do zestawu wynikowego zapytania SQL

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

Przypisuje 1 do wszystkich wierszy. Próbowałem @count = @count + 1 i nie działało. Jak zrobić to w prosty sposób?

dzięki.

+0

Jak chcesz zwiększyć numer wiersza? Arbitralny? Twoje zapytanie nie ma ORDER BY, więc musisz określić, czego oczekujesz od złożenia zamówienia. –

+0

@AaronBertrand - Potrzebuję tylko numerowania moich wierszy. Zamówienie nie jest naprawdę konieczne. Czy to jest odpowiedź na Twoje pytanie ? –

+0

A więc wszystko w porządku, że kolejność jest stosowana losowo, a wyniki są wypluwane do zapytania w niespójnej kolejności za każdym razem? –

Odpowiedz

34

Typowy wzór będzie w następujący sposób, ale trzeba właściwie określić, w jaki sposób zamawiania powinny być stosowane (ponieważ tabela jest, z definicji, nieuporządkowana torba wierszy):

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

Nie wiesz co zmienne w twoim pytaniu mają reprezentować (nie pasują).

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

Zobacz przykład roboczych at SQLFiddle

Oczywiście, można określić kolejność numerowania wierszy - jeśli tak, to po prostu zamienić OVER (ORDER BY (SELECT 1)) dla np OVER (ORDER BY t.C), jak w normalnym ORDER BY klauzuli.