MSSQL Select语句具有增量整数列。。。不是从桌子上

MSSQL Select语句具有增量整数列。。。不是从桌子上,sql,sql-server,sql-server-2000,auto-increment,row-number,Sql,Sql Server,Sql Server 2000,Auto Increment,Row Number,如果可能的话,我需要一个t-sql查询,该查询从任意表返回值,并返回一个增量整数列,第一行的值为1,第二行的值为2,依此类推 此列实际上不存在于任何表中,必须严格地递增,因为ORDER BY子句可以对表中的行进行排序,我希望递增的行始终保持完美的形状 提前谢谢 -编辑 抱歉,忘了提及,必须在SQL Server 2000上运行 例如: SELECT col1, col2, ROW_NUMBER() OVER (ORDER BY col1) AS rownum FROM tbl 适用

如果可能的话,我需要一个t-sql查询,该查询从任意表返回值,并返回一个增量整数列,第一行的值为1,第二行的值为2,依此类推

此列实际上不存在于任何表中,必须严格地递增,因为ORDER BY子句可以对表中的行进行排序,我希望递增的行始终保持完美的形状

提前谢谢

-编辑 抱歉,忘了提及,必须在SQL Server 2000上运行

例如:

SELECT
  col1,
  col2,
  ROW_NUMBER() OVER (ORDER BY col1) AS rownum
FROM tbl
适用于SQL 2005及以上版本

SELECT ROW_NUMBER() OVER( ORDER BY SomeColumn ) AS 'rownumber',*
    FROM YourTable
对于2000年,你需要这样做

SELECT IDENTITY(INT, 1,1) AS Rank ,VALUE
INTO #Ranks FROM YourTable WHERE 1=0

INSERT INTO #Ranks
SELECT SomeColumn  FROM YourTable
ORDER BY SomeColumn 

SELECT * FROM #Ranks
Order By Ranks

另请参见此处

它很难看,性能也很差,但从技术上讲,它适用于至少有一个唯一字段的任何表,并且适用于SQL 2000

SELECT (SELECT COUNT(*) FROM myTable T1 WHERE T1.UniqueField<=T2.UniqueField) as RowNum, T2.OtherField
FROM myTable T2
ORDER By T2.UniqueField

注意:如果使用此方法并将WHERE子句添加到外部SELECT,则如果希望数字连续,也必须将其添加到内部SELECT。

您可以从自定义数字开始并从该数字开始递增,例如,您希望为您可以执行的每项付款添加支票号码:

select @StartChequeNumber = 3446;
SELECT 
((ROW_NUMBER() OVER(ORDER BY AnyColumn)) + @StartChequeNumber ) AS 'ChequeNumber'
,* FROM YourTable

将为每一行提供正确的支票号码。

对不起,我忘了提到,必须运行SQL 2000。不要忘记删除临时表,它将正常工作,但正如您已经提到的,它必须扫描每一行的整个表,这也称为运行计数。是的,这是一个非常糟糕的解决方案。然而,在SQL2K的约束下,它要么是这个,要么是另一个答案中已经提供的临时表。我想这取决于具体的场景,哪种解决方案的危害较小。场景是:从表中选择数千行:_