有什么方法可以从函数中进行选择并使其返回递增数字?在SQL Server中生成递增数字的函数
例如,做到这一点:
SELECT SomeColumn, IncrementingNumbersFunction() FROM SomeTable
,并让它返回:
SomeColumn | IncrementingNumbers
--------------------------------
some text | 0
something | 1
foo | 2
有什么方法可以从函数中进行选择并使其返回递增数字?在SQL Server中生成递增数字的函数
例如,做到这一点:
SELECT SomeColumn, IncrementingNumbersFunction() FROM SomeTable
,并让它返回:
SomeColumn | IncrementingNumbers
--------------------------------
some text | 0
something | 1
foo | 2
上的SQL Server 2005最多可以使用ROW_NUMBER()
SELECT SomeColumn,
ROW_NUMBER() OVER(Order by SomeColumn) as IncrementingNumbers
FROM SomeTable
0N SQL Server 2000,您可以使用身份,但如果你有删除,你将有差距
SQL 2000如果您的常规表中存在与身份列之间的空白,请将其插入到带有身份的临时数据中,然后选择退出
SELECT SomeColumn,
IDENTITY(INT,1,1) AS IncrementingNumbers
INTO #temp
FROM SomeTable
ORDER BY SomeColumn
SELECT * FROM #temp
ORDER BY IncrementingNumbers
,你可以自动递增标识列,还是我错过理解这个问题?
不,SQLServer中没有序列生成函数。您可能会发现identity字段类型方便地解决您当前的问题。
我认为您在寻找ROW_NUMBER在SQL Server 2005中添加了它。它“返回结果集的分区内的行的序号,从1开始,每个分区的第一行。
From MSDN(其中有很多更多)以下示例根据年初至今的销售情况为AdventureWorks2008R2中的销售人员返回ROW_NUMBER。
SELECT FirstName, LastName, ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number', SalesYTD, PostalCode
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;
从SQL 2012版及更高版本开始,有一个built-in sequence feature。
实施例:
-- sql to create the Sequence object
CREATE SEQUENCE dbo.MySequence
AS int
START WITH 1
INCREMENT BY 1 ;
GO
-- use the sequence
SELECT NEXT VALUE FOR dbo.MySequence;
SELECT NEXT VALUE FOR dbo.MySequence;
SELECT NEXT VALUE FOR dbo.MySequence;
几个。你想每个表行(每行),每个输出行(可能有一个WHERE子句),基于一些排序(按字母顺序排列,最早等)...? – gbn 2010-08-24 17:43:08