在SQL

2009-11-09 13 views
3

运行的数字我有一个SQL语句是这样的:在SQL

SELECT name FROM users WHERE deleted = 0; 

如何创建与第一行中运行号的结果集?所以结果如下:

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

它DBMS依赖 - 你用什么? – 2009-11-09 14:35:17

+0

我使用MySQL和PostgreSQL。 – DerKlops 2009-11-09 14:47:03

回答

9

OracleSQL ServerPostreSQL 8.4

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

MySQL

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

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

在SQL Server 2005中您可以使用ROW_NUMBER()OVER(ORDER BY yourColumn),像这样:

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