如何在SQL Server 2000查询中获取当前行号?

5

如何在不支持ROW_NUMBER()函数的SQL Server 2000中获取SQL查询中的行号?

6个回答

7

您可以尝试使用带有标识列的临时表。

DECLARE @table TABLE(
        [id] INT IDENTITY(1,1),
        Val VARCHAR(10)
)

DECLARE @TableFrom TABLE(
        Val VARCHAR(10)
)
INSERT INTO @TableFrom (Val) SELECT 'A'
INSERT INTO @TableFrom (Val) SELECT 'B'
INSERT INTO @TableFrom (Val) SELECT 'C'
INSERT INTO @TableFrom (Val) SELECT 'D'

INSERT INTO @table (Val) SELECT * FROM @TableFrom ORDER BY Val DESC
SELECT * FROM @table

我见过的一些最好的Sql Server 2000分页使用了这种模式。

DECLARE @PageStart INT,
        @PageEnd INT

SELECT  @PageStart = 51,
        @PageEnd = 100

SELECT  <TABLE>.*
FROM    (
            SELECT  TOP (@PageStart - 1)
                    <ID>
            FROM    (
                        SELECT  TOP (@PageEnd)
                                <ID>
                        FROM    TABLE
                        ORDER BY <ID> ASC
                    ) SUB
            ORDER BY SUB.<ID> DESC
        ) SUB INNER JOIN
        <TABLE> ON SUB.<ID> = <TABLE>.<ID>
ORDER BY SUB.<ID>

除此之外,这不是一个临时表而是一个表变量,它们在200中也不被支持。 - Andomar
1
SQL Server 2000支持表变量。 - HLGEM

3

使用另一种方法创建带有标识的临时表:

SELECT Field1, Field2, IDENTITY(int, 1,1) AS MyID 
INTO #Temp 
FROM Table1


1

1

另一种不使用SQL定义函数的方法是:

SELECT 
(SELECT COUNT(1) + 1 FROM YourTable t2 WHERE t2.Id < t.Id) AS RowNumber
FROM YourTable t

这有点棘手,但似乎比其他人给你的选项更简单。

0

您能详细说明一下以下查询如何解决问题吗?

SELECT ( SELECT SUM(1)

FROM specimen_source_ref

WHERE specimen_source_rcd <= reg.specimen_source_rcd

) AS '行号'

,*

FROM specimen_source_ref reg


这将为您提供列表中小于或等于当前项目的项目数,但如果有重复项,则不会为您提供唯一的行号。 - Adriaan Stander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接