我想为sql查询的结果中的每一行生成一个行号。怎么可能这样做?
示例:在请求中
select distinct client_name from deliveries
我想添加一个显示行号
的列我正在使用sql server 2005。
答案 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;
希望这也有帮助:)