J'ai besoin, si possible, d'une requête t-sql qui, renvoyant les valeurs d'une table arbitraire, renvoie également une colonne entière incrémentielle avec valeur = 1 pour la première ligne, 2 pour la seconde, et ainsi de suite.
Cette colonne ne réside dans aucune table et doit être strictement incrémentielle, car la clause ORDER BY pourrait trier les lignes de la table et je veux toujours que la ligne incrémentielle soit en parfait état ...
Merci d'avance.
--EDIT Désolé, oublié de mentionner, doit fonctionner sur SQL Server 2000
Pour SQL 2005 et supérieur
SELECT ROW_NUMBER() OVER( ORDER BY SomeColumn ) AS 'rownumber',*
FROM YourTable
pour 2000, vous devez faire quelque chose comme ça
SELECT IDENTITY(INT, 1,1) AS Rank ,VALUE
INTO #Ranks FROM YourTable WHERE 1=0
INSERT INTO #Ranks
SELECT SomeColumn FROM YourTable
ORDER BY SomeColumn
SELECT * FROM #Ranks
Order By Ranks
voir aussi ici Numéro de ligne
Vous pouvez commencer avec un numéro personnalisé et incrémenter à partir de là, par exemple, vous souhaitez ajouter un numéro de chèque pour chaque paiement que vous pouvez effectuer:
select @StartChequeNumber = 3446;
SELECT
((ROW_NUMBER() OVER(ORDER BY AnyColumn)) + @StartChequeNumber ) AS 'ChequeNumber'
,* FROM YourTable
donnera le bon numéro de chèque pour chaque ligne.
Essayez ROW_NUMBER ()
http://msdn.Microsoft.com/en-us/library/ms186734.aspx
Exemple:
SELECT
col1,
col2,
ROW_NUMBER() OVER (ORDER BY col1) AS rownum
FROM tbl
Il est laid et fonctionne mal, mais techniquement, cela fonctionne sur n'importe quelle table avec au moins un champ unique ET fonctionne dans SQL 2000.
SELECT (SELECT COUNT(*) FROM myTable T1 WHERE T1.UniqueField<=T2.UniqueField) as RowNum, T2.OtherField
FROM myTable T2
ORDER By T2.UniqueField
Remarque: Si vous utilisez cette approche et ajoutez une clause WHERE au SELECT externe, vous devez également l'ajouter au SELECT interne si vous souhaitez que les nombres soient continus.