2009-02-10 59 views
26

如果可能的話,我需要一個t-sql查詢,它返回來自任意表的值,也返回值爲1的遞增整數列第一行,第二行2,依此類推。MSSQL Select語句的增量整數列...不是來自表

此列實際上並不存在於任何表,並且必須嚴格增量,因爲ORDER BY子句可以在表中的行進行排序,我想在總是完美的造型增量排...

謝謝提前。

--edit 對不起,忘了提,必須SQL Server上運行2000

回答

46

對於SQL 2005和up

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

+4

不要忘記刪除臨時表 – 2009-02-10 21:37:42

-1

這是醜陋的表現不好,但在技術上這適用於任何表至少有一個獨特的領域和工作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,如果你還想要的數字是 連續。

+0

這將工作,但就像你已經提到的每行都必須掃描整個表,這也被稱爲運行計數 – SQLMenace 2009-02-10 21:38:07

2

你可以從那裏定製的數量和增量入手,比如你想添加一個支票號碼,每次付款,你可以這樣做:

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

會給每一行正確的校驗數。