Lipseşte ceva important din tabela ta: primary key-ul; şi nu mă refer la o coloană ID, identity, care ar trebui fi primary key doar dacă există o altă cheie unică bazată pe coloane introduse de utilizator. În cazul în care primary key-ul este coloana nume, atunci query-ul găsit de tine este foarte bun. O altă variantă, care merge doar începând din SQL 2005, ar fi:
SELECT ROW_NUMBER() OVER (ORDER BY Nume) as rowNumber, *
FROM Persoane
ORDER BY rowNumber
Acest query ar rezolva problema şi în cazul în care ar fi mai multe persoane cu acelaşi Nume dar cu Prenume diferite (dându-le rowNumber-uri diferite, dar fără o ordine anume). Dacă vrem să se comporte oarecum asemănător cu query-ul tău, am putea să folosim funcţia RANK în loc de ROW_NUMBER.
Dacă avem cheia unică Nume+Prenume (aşa cum ar fi normal pentru o astfel de tabelă), ar trebui să luăm în considerare la numerotarea rândurilor ambele coloane. În cazul în care folosim SQL 2005, e banal, punem "OVER (ORDER BY Nume, Prenume)", dar dacă folosim SQL 2000, query-ul se complică puţin:
SELECT (
SELECT COUNT(*) FROM Persoane b
WHERE b.nume < a.nume
OR b.nume=a.nume and b.prenume<a.prenume
)+1 as rowNumber, *
FROM Persoane a
ORDER BY rowNumber
Răzvan