web-dev-qa-db-fra.com

Ajouter un numéro de ligne au jeu de résultats d'une requête SQL

J'ai une simple déclaration de sélection. Je souhaite ajouter une colonne temporaire qui numérotera les lignes de mon jeu de résultats. J'ai essayé ceci -

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

Il attribue le 1 à toutes les lignes. J'ai essayé @count = @count +1 et cela n'a pas fonctionné. Comment puis-je faire cette chose d'une manière simple?

merci.

36
Trojan.ZBOT

Le modèle typique serait le suivant, mais vous devez définir réellement la manière dont l'ordre doit être appliqué (puisqu'un tableau est, par définition, un sac de lignes non ordonné):

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

Vous ne savez pas ce que les variables de votre question sont censées représenter (elles ne correspondent pas).

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

Voir exemple de travail à SQLFiddle

Bien sûr, vous pouvez définir l'ordre de numérotation des lignes. Dans ce cas, il vous suffit d'échanger OVER (ORDER BY (SELECT 1)) contre, par exemple, OVER (ORDER BY t.C), comme dans une clause ORDER BY Normale.

53
Shai