2010-10-21 78 views
1

我想對結果集中的行進行編號。我想一些方法可以讓我有一個結果集的3條使用一些SQL關鍵字生成會讀爲1,2,3的記錄表列...sql結果集記錄編號?

我知道我可以做一個臨時表一個自動增量列,但我想知道是否有一種方法,我可以從SQL查詢返回這個方法?

SELECT row_count, 
     project_name, 
     project_id 
    FROM Project 

任何可用的類似 「ROW_COUNT」 我在做夢嗎?

回答

2

聽起來像你想ROW_NUMBER,一個analytic/ranking function。但目前還不清楚要立足於編號是什麼 - 這個假設project_id,始於最小值:

SELECT ROW_NUMBER() OVER(ORDER BY p.project_id) AS row_count, 
     p.project_name, 
     p.project_id 
    FROM PROJECT p 
+0

ui希望它從1開始,並在select的數據集中的每一行增加1。 – kacalapy 2010-10-21 16:13:43

+0

@kacalapy:這就是ROW_NUMBER所做的事情,但您可以具體說明該編號的基礎。 – 2010-10-21 16:15:23

5

排序方式SELECT 0會給你一個遞增列,並保存潛在不必要的排序。

SELECT ROW_NUMBER() over (order by (select 0)) as row_count, 
     project_name, 
     project_id 
    FROM Project 
+0

+1:那麼在使用'SELECT 0'時,ROW_NUMBER值的順序是什麼?它不是任意的/隨機的,對吧? – 2010-10-21 16:18:52

+0

@OMG - 在執行計劃段迭代之前,計算標量操作者只傳遞在取值爲0作爲SegmentColumn而不是特定列值。但是段迭代器要求它的輸入由SegmentColumn排序,所以使用常量可以跳過排序步驟。 (或給它自由選擇不同的訪問路徑,例如排序在不同列上的覆蓋非聚簇索引) – 2010-10-21 16:25:19

+0

那麼這個數字將基於記錄插入順序? – 2010-10-21 16:27:57