行号提取

时间:2013-04-24 12:08:38

标签: sql-server stored-procedures

我的表包含大约5000行。我想知道表格中的特定行位置。 我的存储过程是:

 CREATE PROC Sp_getrownumber(@MemberID INT) 
AS 
    SELECT Row_number() 
             OVER (  ORDER BY joiningdate ASC) AS Rownumber, 
           M.memberid, 
           P.name, 
           M.joiningdate 
    FROM   tblmemberdata M 
           JOIN tblpersonaldetails P 
             ON M.memberid = P.memberid 

但是当我尝试2获取特定行时,行no显示为1。 代码是:

 CREATE PROC Sp_getrownumber(@MemberID INT) 
AS 
    SELECT Row_number() 
             OVER (  ORDER BY joiningdate ASC) AS Rownumber, 
           M.memberid, 
           P.name, 
           M.joiningdate 
    FROM   tblmemberdata M 
           JOIN tblpersonaldetails P 
             ON M.memberid = P.memberid 
    WHERE  M.memberid = @MemberID

如何获取确切的行号?

3 个答案:

答案 0 :(得分:2)

将其修改为:

alter proc SP_GetRowNumber
(@MemberID int)
as
SELECT * FROM (
  SELECT
ROW_NUMBER() OVER (ORDER BY JoiningDate ASC) AS Rownumber,
M.MemberID,P.Name,M.JoiningDate
FROM tblMemberData M join tblPersonalDetails P on M.MemberID=P.MemberID
) AS Counts
WHERE MemberID = @MemberID

答案 1 :(得分:2)

您看到的是因为ROW_NUMBER()仅适用于本地SELECT ,而不适用于整个桌面!

试试这个:

CREATE PROC Sp_getrownumber(@MemberID INT) 
AS
    SELECT *
    FROM (
        SELECT Row_number() 
                 OVER (ORDER BY joiningdate ASC) AS Rownumber, 
               M.memberid, 
               P.name, 
               M.joiningdate 
        FROM   tblmemberdata M 
        JOIN tblpersonaldetails P 
               ON M.memberid = P.memberid
    ) tblRowCounter
    WHERE M.memberid = @MemberID;

此代码完成的是对内存表执行过滤,保留原始行号。

但是!请注意SQL中没有行编号。 SQL只是知道有一大堆属于表的数据。 ORDER BY joiningdate ASC子句中的OVER语句非常重要!更改该列或添加更多列可能会更改行号。

答案 2 :(得分:1)

CREATE PROC Sp_getrownumber(@MemberID INT) 
AS 
    ;WITH Numbered AS (
      SELECT Row_number() 
               OVER (  ORDER BY joiningdate ASC) AS Rownumber, 
             M.memberid, 
             P.name, 
             M.joiningdate 
       FROM   tblmemberdata M 
           JOIN tblpersonaldetails P 
             ON M.memberid = P.memberid 
    )
    SELECT *
    FROM Numbered
    WHERE memberid = @MemberID