我的表包含大约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
如何获取确切的行号?
答案 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