2012-12-31 62 views
3

這裏是我的sql server 2008存儲過程。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 

註釋掉訂單,因爲訂單通過不會在子查詢工作。我需要展示最上面的一個。有沒有一種方法可以在我的代碼中使用順序?

+1

+1添加S.CreatedDate格式化的代碼和非常清晰Ÿ措辭問題 –

回答

3

您可以爲非常漂亮,內Row_NUMBER()

ROW_NUMBER() OVER (PARTITION BY S.Id ORDER BY S.CreatedDate DESC) AS RowNum

+1

非常感謝,只是一個小小的更正。應該是ROW_NUMBER()OVER(ORDER BY S.Id DESC)rownum – qinking126

+0

@feelexit很高興您驗證,並得到它的工作:)我得到的印象,你希望有'分區ID'和'的命令由CreatedDate';) – bonCodigo

3

沒錯。這是不允許的,因爲它什麼都不會做。

在子查詢的頂部有最新的一個將使用子查詢執行沒有任何結果集。

所需的列添加到結果集ORDER BY

ORDER BY seq.CreatedDate DESC, seq.rownum 

或者:

ORDER BY seq.rownum, seq.CreatedDate DESC