[英]sql server 2008, cannot use order by in subquery
这是我的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
:
ORDER BY seq.CreatedDate DESC, seq.rownum
要么:
ORDER BY seq.rownum, seq.CreatedDate DESC
您可以在Row_NUMBER()
添加S.CreatedDate
ROW_NUMBER() OVER (PARTITION BY S.Id ORDER BY S.CreatedDate DESC) AS RowNum
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.