如果可能的话,我需要一个T-SQL查询,该查询不仅可以返回任意表中的值,还可以返回一个增量整数列,其中第一行的值为1,第二行为2,依此类推。
这个列实际上并不存在于任何表中,并且必须是严格递增的,因为ORDER BY子句可能会对表的行进行排序,我希望递增行始终保持完好无损。
该解决方案必须在SQL Server 2000上运行。
如果可能的话,我需要一个T-SQL查询,该查询不仅可以返回任意表中的值,还可以返回一个增量整数列,其中第一行的值为1,第二行为2,依此类推。
这个列实际上并不存在于任何表中,并且必须是严格递增的,因为ORDER BY子句可能会对表的行进行排序,我希望递增行始终保持完好无损。
该解决方案必须在SQL Server 2000上运行。
适用于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
您可以从自定义数字开始递增,例如,如果您想为每次付款添加支票号码,则可以执行以下操作:
select @StartChequeNumber = 3446;
SELECT
((ROW_NUMBER() OVER(ORDER BY AnyColumn)) + @StartChequeNumber ) AS 'ChequeNumber'
,* FROM YourTable
会为每一行给出正确的支票号码。
尝试使用ROW_NUMBER()
http://msdn.microsoft.com/zh-cn/library/ms186734.aspx
示例:
SELECT
col1,
col2,
ROW_NUMBER() OVER (ORDER BY col1) AS rownum
FROM tbl
这段代码虽然丑陋且性能不佳,但从技术上讲,它适用于至少有一个唯一字段的任何表,并且在SQL 2000中也能正常工作。
SELECT (SELECT COUNT(*) FROM myTable T1 WHERE T1.UniqueField<=T2.UniqueField) as RowNum, T2.OtherField
FROM myTable T2
ORDER By T2.UniqueField