由于某种原因,下面的代码返回结果,但输入顺序不正确。
任何人都有任何想法,因为我已经看了几个小时并且还没有发现问题:
USE [storeboard]
GO
/****** Object: StoredProcedure [sbuser].[sp_MemberMailList ] Script Date: 11/25/2011 12:04:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [sbuser].[sp_MemberMailList ]
@MemberMailID bigint = null,
@FromMemberID bigint = null,
@ToMemberID bigint = null,
@Subject varchar(150) = null,
@Message varchar(8000) = null,
@FromDeletedFlag bit = null,
@ToDeletedFlag bit = null,
@FromArchivedFlag bit = null,
@ToArchivedFlag bit = null,
@ReadFlag bit = null,
@SQL nvarchar(4000) = null,
@SortField varchar(100) = null,
@SortOrder varchar(25) = null,
@NotificationSent bit = null,
@MemberID bigint = null,
@OnHold bit = 0,
@SpecialMail varchar(1) = 'N',
@PageSize float = null,
@PageNum int = 1,
@TotalPages float = null,
@StartDate datetime = null,
@EndDate datetime = null,
@MODE varchar(50)
AS
IF @MODE = 'INBOX-MAIL-NOSORT'
BEGIN
SELECT @TotalPages = CEILING(COUNT(*)/@PageSize)
FROM MemberMail
WHERE ToMemberID = @ToMemberID
AND ToDeletedFlag = 0
AND OnHold = 0
AND ToArchivedFlag = 0
AND FromDeletedFlag = 0;
WITH InMailsCDDESC AS
(
SELECT ROW_NUMBER() OVER(ORDER BY a.CreateDate DESC) AS RowNum,
a.MemberMailID, -- 1
a.FromMemberID, -- 2
a.Subject, -- 3
a.CreateDate, -- 4
b.UserName, -- 5
a.ToReadFlag, -- 6
b.Firstname, -- 7
b.Lastname, -- 8
b.MemberDisplayName AS DisplayName, -- 9
@TotalPages AS TotalPages -- 10
FROM MemberMail a
INNER JOIN Member b ON b.MemberID = a.FromMemberID
WHERE a.ToMemberID = @ToMemberID
AND a.ToDeletedFlag = 0
AND a.OnHold = 0
AND a.ToArchivedFlag = 0
AND a.FromDeletedFlag = 0
)
SELECT * FROM InMailsCDDESC
WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1 AND @PageNum * @PageSize
END
非常感谢您提供的任何帮助。 非常感谢, 保罗
答案 0 :(得分:5)
如果您需要特定订单,则需要在SELECT语句中使用ORDER BY
。
由于您没有在SELECT语句中指定ORDER BY
,因此数据库可以按照自己喜欢的顺序自由返回行。
修改
我正在添加Lamak的评论以完成这个答案:
ORDER BY
窗口定义中的row_number()
仅用于计算row_number()
函数的结果。它不用于对整体结果进行排序(这是窗口函数之美的一部分)
要按计算的row_number()
排序,您需要在最终的SELECT语句中添加ORDER BY RowNum
。
答案 1 :(得分:0)
我相信您需要在最终的select语句中添加orderby,可能是通过rownum命令?