Comment puis-je générer un numéro de ligne sans utiliser rownum () dans le server sql

J'ai le tableau suivant:

CREATE table prd ( prdid varchar(10) ) insert into prd values ('prd1011'),('prd1023'),('prd4532'),('prd2341') 

J'ai besoin de returnner la même chose avec rownumber sans utiliser ROWNUM () construit dans la fonction. Est-ce possible?

 select *, ( select count(*) from prd p2 where p1.prdid >= p2.prdid ) as cnt from prd p1 

Vous avez omis de spécifier la version ou la motivation de SQL Server pour la request.

Une méthode SQL Server 2012+

 SELECT prdid, COUNT(*) OVER (ORDER BY prdid ROWS UNBOUNDED PRECEDING) FROM prd 

SQL Fiddle

Solution pour colonne non unique:

 SELECT p.prdid, p.num - tn + 1 as num FROM ( SELECT p1.prdid, p1.cnt , ( SELECT COUNT(*) FROM prd p2 WHERE p2.prdid <= p1.prdid ) num FROM ( SELECT p1.prdid, COUNT(*) cnt FROM prd p1 GROUP BY p1.prdid ) p1 ) p INNER JOIN ( select 1 n union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9 union all select 10 union all select 11 union all select 12 union all select 13 union all select 14 union all select 15 union all select 16 union all select 17 union all select 18 union all select 19 union all select 20 ) t ON tn <= p.cnt 

Trouvé ici .

J'ai essayé ceci et cela a fonctionné mais cela ne fonctionne que si la colonne prdid est unique:

 select prdid, (select COUNT(*) from prd p where p.prdid >= r.prdid)rnk from prd r order by rnk