48

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

该列实际上并不驻留在任何表中,并且必须严格递增,因为 ORDER BY 子句可以对表的行进行排序,并且我希望增量行始终保持完美的形状......

提前致谢。

--EDIT 对不起,忘了说,必须在 SQL Server 2000 上运行

4

4 回答 4

74

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

另请参阅此处的 行号

于 2009-02-10T21:26:11.793 回答
10

您可以从自定义编号开始并从那里递增,例如,您想为可以执行的每笔付款添加一个支票编号:

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

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

于 2013-05-01T16:13:27.020 回答
5

试试 ROW_NUMBER()

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

例子:

SELECT
  col1,
  col2,
  ROW_NUMBER() OVER (ORDER BY col1) AS rownum
FROM tbl
于 2009-02-10T21:19:57.283 回答
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 中。

于 2009-02-10T21:34:14.923 回答