首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >行号取数

行号取数
EN

Stack Overflow用户
提问于 2013-04-24 20:08:38
回答 3查看 98关注 0票数 2

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

代码语言:javascript
复制
 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。代码为:

代码语言:javascript
复制
 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

如何获取准确的行号?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-24 20:12:09

将其修改为:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-04-24 20:14:47

您看到的是因为ROW_NUMBER()只在本地SELECT 上工作,而不是在整个表上工作!

试试这个:

代码语言:javascript
复制
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只知道有一大堆数据属于一个表。OVER子句中的ORDER BY joiningdate ASC语句是非常重要的!更改该列或添加更多列可能会更改行号。

票数 2
EN

Stack Overflow用户

发布于 2013-04-24 20:14:47

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16191634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档