2010-10-21 67 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