sql server 2008,无法在子查询中使用order by

sql server 2008,无法在子查询中使用order by,sql,sql-server-2008,stored-procedures,Sql,Sql Server 2008,Stored Procedures,这是我的sql server 2008存储过程 ALTER PROCEDURE [dbo].[GetSharedSmoothies] @Page INT , @Status INT , @ItemPerPage INT AS BEGIN SET NOCOUNT ON; DECLARE @X INT DECLARE @Y INT SET @X = ( @Page - 1 ) * @ItemPer

这是我的sql server 2008存储过程

ALTER PROCEDURE [dbo].[GetSharedSmoothies]
    @Page INT ,
    @Status INT ,
    @ItemPerPage INT
AS 
    BEGIN
        SET NOCOUNT ON;

        DECLARE @X INT 
        DECLARE @Y INT

        SET @X = ( @Page - 1 ) * @ItemPerPage
        SET @Y = @Page * @ItemPerPage


        SELECT  *
        FROM    ( SELECT    S.* ,
                            U.Avatar ,
                            U.Displayname ,
                            ( SELECT    COUNT(Id)
                              FROM      Vote
                              WHERE     Vote.SmoothieId = S.Id
                            ) AS Votes ,
                            ROW_NUMBER() OVER ( ORDER BY S.Id ) rownum
                  FROM      dbo.Smoothie AS S
                            INNER JOIN dbo.[User] AS U ON S.UserId = U.Id
                  WHERE     S.IsPublic = 1
                            AND S.Status = 3
                            AND S.UserId > 0
                  -- ORDER BY  S.CreatedDate DESC
                ) seq
        WHERE   seq.rownum BETWEEN @X AND @Y
        ORDER BY seq.rownum
    END
在我的代码中,您将看到我用

 -- ORDER BY  S.CreatedDate DESC

因为order by在子查询中不起作用。我需要把最新的放在上面。有没有一种方法可以在代码中使用order by?

没错。这是不允许的,因为它什么也做不了

将最新的一个放在子查询的顶部将不会对使用子查询的结果集产生任何影响

将所需列添加到结果集“排序依据”:

ORDER BY seq.CreatedDate DESC, seq.rownum
或:


您可以在
行编号()中添加
S.CreatedDate


ROW_NUMBER()(按S.Id顺序划分,按S.CreatedDate DESC)作为RowNum

+1,以获得格式非常好的代码和措辞非常清晰的问题。多谢,只需一个小的更正。应为第行()以上(按S.Id说明排序)rownum@feelexit很高兴您进行了实验并成功了:)我得到了您想要的印象(ID上的
分区
按CreatedDate排序
;)
ORDER BY seq.rownum, seq.CreatedDate DESC