2013-11-27 115 views
23

我有一個簡單的select語句。我想添加一個臨時列,它將對結果集中的行進行編號。我試過了 -將行號添加到SQL查詢的結果集中

declare @num int 
set @num = 0; 
select t.A, t.B, t.C, (@count + 1) as number 
from tableZ as t 

它將1分配給所有行。我試過@count = @count + 1,但它不起作用。 如何以簡單的方式做這件事?

謝謝。

+0

你想如何增加行號?任意?您的查詢沒有ORDER BY,因此,您需要定義您希望訂購的內容。 –

+0

@AaronBertrand - 我只需要將我的行編號。訂單並不是真的有必要。這是否回答你的問題 ? –

+0

因此,您可以隨機應用訂單,並且每次都會以不一致的順序將結果吐出到您的查詢中? –

回答

34

的典型模式是如下,但實際上你需要定義排序如何應用(因爲表,顧名思義,行的無序袋):

SELECT t.A, t.B, t.C, number = ROW_NUMBER() OVER (ORDER BY t.A) 
    FROM dbo.tableZ AS t 
    ORDER BY t.A; 

不知道是什麼你問題中的變量應該表示(它們不匹配)。

39
SELECT 
    t.A, 
    t.B, 
    t.C, 
    ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS number 
FROM tableZ AS t 

見工作示例at SQLFiddle

當然,你可能要定義的行編號順序 - 如果是這樣,只是在正常ORDER BY條款交換OVER (ORDER BY (SELECT 1))爲,例如,OVER (ORDER BY t.C),等等。

相關問題