在SQL
问题描述:
运行的数字我有一个SQL语句是这样的:在SQL
SELECT name FROM users WHERE deleted = 0;
如何创建与第一行中运行号的结果集?所以结果如下:
1 Name_1
2 Name_3
3 Name_12
4 Name_15
...
答
在Oracle
,SQL Server
和PostreSQL 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
答
这取决于你的DBMS--在Oracle中,你可以在select中使用rownum。没有标准的SQL方式,但大多数DBMS支持某种方式来实现它。
下面是MySQL的:
http://jimlife.wordpress.com/2008/09/09/displaying-row-number-rownum-in-mysql/
这里的SQL服务器
http://samsudeenb.blogspot.com/2008/09/how-to-generate-rownum-in-sql-server.html
答
在SQL Server 2005中您可以使用ROW_NUMBER()OVER(ORDER BY yourColumn),像这样:
SELECT row_number() OVER(ORDER BY myColumn) FROM myTable
它DBMS依赖 - 你用什么? – 2009-11-09 14:35:17
我使用MySQL和PostgreSQL。 – DerKlops 2009-11-09 14:47:03