2009-11-09 5 views
3
SQL

j'ai une instruction SQL comme ceci:numéros en cours dans

SELECT name FROM users WHERE deleted = 0; 

Comment puis-je créer un jeu de résultats avec un numéro en cours d'exécution dans la première rangée? Ainsi, le résultat ressemblerait à ceci:

1 Name_1 
2 Name_3 
3 Name_12 
4 Name_15 
... 
+3

Il dépend SGBD - ce que vous utilisez? –

+0

J'utilise MySQL et PostgreSQL. – DerKlops

Répondre

9

En Oracle, SQL Server et PostreSQL 8.4:

SELECT ROW_NUMBER() OVER (ORDER BY name) 
FROM users 
WHERE deleted = 0 

En MySQL:

SELECT @r := @r + 1 AS rn 
FROM (
     SELECT @r := 0 
     ) vars, users 
WHERE deleted = 0 
ORDER BY 
     name 

En PostgreSQL 8.3:

SELECT num, (arr[num]).* 
FROM (
     SELECT generate_series(1, array_upper(arr, 1)) AS num, arr 
     FROM (
       SELECT ARRAY 
         (
         SELECT users 
         FROM users 
         ORDER BY 
           name 
         ) AS arr 
       ) q 
     ) q2 
3

Dans SQL Server 2005, vous pouvez utiliser row_number() sur (commande par yourColumn), comme ceci:

SELECT row_number() OVER(ORDER BY myColumn) FROM myTable