Reputation: 1663
For some reason the code below is returning the results, put not in the correct order.
Anyone have any ideas why as I have been looking at it for a couple of hours and have yet to spot the problem:
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
Any help you can provide would be greatly appreciated. Many thanks, Paul
Upvotes: 1
Views: 203
Reputation:
If you want a specific order you need to use an ORDER BY
in your SELECT statement.
As you don't specify an ORDER BY
in your SELECT statement, the database is free to return the rows in any order it likes.
Edit
I'm adding Lamak's comment to make this answer complete:
The ORDER BY
in the definition of the window for row_number()
is only used to to calculate result of the row_number()
function. It is not used to sort the overall result (which is part of the beauty of windowing functions)
To order by the calculated row_number()
you need to add an ORDER BY RowNum
to the final SELECT statement.
Upvotes: 5
Reputation: 4188
I believe you need to add the orderby in your final select statement, possibly order by rownum?
Upvotes: 0