具有增量整数列的MSSQL Select语句...不是来自表

时间:2009-02-10 21:16:44

标签: sql sql-server sql-server-2000 auto-increment row-number

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

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

提前致谢。

- 编辑 对不起,忘了提,必须在SQL Server 2000上运行

4 个答案:

答案 0 :(得分:55)

对于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

另见Row Number

答案 1 :(得分:4)

您可以从那里开始使用自定义数字和增量,例如,您要为每笔付款添加支票号码:

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

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

答案 2 :(得分:2)

尝试ROW_NUMBER()

http://msdn.microsoft.com/en-us/library/ms186734.aspx

示例:

SELECT
  col1,
  col2,
  ROW_NUMBER() OVER (ORDER BY col1) AS rownum
FROM tbl

答案 3 :(得分:0)

它很难看并且性能很差,但从技术上讲,这适用于任何具有至少一个唯一字段的表,并且可以在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中,如果您希望数字是连续的。