SQL在查询结果中输出行号

时间:2009-08-18 11:54:38

标签: sql sql-server sql-server-2005

我想为sql查询的结果中的每一行生成一个行号。怎么可能这样做?

示例:在请求中

select distinct client_name from deliveries

我想添加一个显示行号

的列

我正在使用sql server 2005。

5 个答案:

答案 0 :(得分:36)

这取决于您使用的数据库。一个适用于SQL Server,Oracle和MySQL的选项:

SELECT ROW_NUMBER() OVER (ORDER BY SomeField) AS Row, *
FROM SomeTable

更改SomeField和SomeTable是根据您的特定表和相关字段来排序的。当然,SomeField最好在查询的上下文中是唯一的。

在您的情况下,查询将如下(Faiz首先制作了这样的查询):

SELECT ROW_NUMBER() OVER (ORDER BY client_name) AS row_number, client_name
FROM (SELECT DISTINCT client_name FROM deliveries) TempTable

我认为它对SQLite不起作用(如果有人可以在这里纠正我,我将不胜感激),我不确定那里有什么替代品。

答案 1 :(得分:4)

您可以使用ROW_NUMBER函数。在此处http://msdn.microsoft.com/en-us/library/ms186734.aspx

检查此语法
SELECT FirstName, LastName, ROW_NUMBER() OVER(ORDER BY FirstName) AS 'Row#'    
FROM Sales.vSalesPerson;

对于您的查询,

SELECT client_name, ROW_NUMBER() Over (Order By client_name) AS row_number 
FROM   (select distinct client_name from deliveries) SQ

会奏效。

答案 2 :(得分:1)

在Oracle中

SQL> select row_number() over (order by deptno) as rn
  2         , deptno
  3  from
  4     ( select distinct deptno
  5            from emp
  6          )
  7  /

        RN     DEPTNO
---------- ----------
         1         10
         2         20
         3         30

SQL>

答案 3 :(得分:0)

在SQL中我们也使用此查询:

select row_number() over (order by table_kid) as S_No ,table_columnname,table_columnname2 from tablename where table_fieldcondition='condtionnal falg or data ';

这里是table_kid或者可能是其他table_columnname

答案 4 :(得分:-1)

或者你也可以

SELECT DISTINCT client_name, @num := @num + 1 AS lineNum(this is your new col)
FROM deliveries
JOIN (SELECT @num :=0) AS n ON 1=1;

希望这也有帮助:)