0

我正在尝试在 MSSQL 中进行一些基本的分页。我遇到的问题是我在(可能)具有相似值的行上对分页进行排序,并且 ORDER BY 子句返回“随机”结果,这不能很好地工作。

举个例子。

如果我有三行,并且我按“评级”对它们进行排序,并且所有评级都是 = '5' - 这些行似乎会“随机”排列自己。如何使行每次都以相同的顺序显示?

我尝试按字段上次编辑的日期时间对其进行排序,但是“评级”是反向排序的,并且再次无法按我期望的方式工作。

这是我目前使用的 SQL。我知道没有数据会让人感到困惑,所以..任何帮助都会非常有用。

SELECT * FROM 
(
  SELECT 
    CAST(grg.defaultthumbid AS VARCHAR) + '_' + 
    CAST(grg.garageid AS VARCHAR) AS imagename,
    (
      SELECT COUNT(imageid) 
      FROM dbo.images im (nolock) 
      WHERE im.garageid = grg.garageid
    ) AS piccount, 
    (
      SELECT COUNT(commentid) 
      FROM dbo.comments cmt (nolock) 
      WHERE cmt.garageid = grg.garageid
    ) AS commentcount,
    grg.GarageID, mk.make, mdl.model, grg.year, 
    typ.type, usr.username, grg.content, 
    grg.rating, grg.DateEdit as DateEdit,
    ROW_NUMBER() OVER (ORDER BY Rating DESC) As RowIndex 
  FROM 
    dbo.garage grg (nolock)
    LEFT JOIN dbo.users (nolock) AS usr ON (grg.userid = usr.userid)
    LEFT JOIN dbo.make (nolock) AS mk ON (grg.makeid = mk.makeid)
    LEFT JOIN dbo.type (nolock) AS typ ON (typ.typeid = mk.typeid)
    LEFT JOIN dbo.model (nolock) AS mdl ON (grg.modelid = mdl.modelid)
  WHERE 
    typ.type = 'Automobile' AND
    grg.defaultthumbid != 0 AND
    usr.username IS NOT NULL
) As QueryResults 
WHERE 
  RowIndex BETWEEN (2 - 1) * 25 + 2 AND 2 * 25
ORDER BY 
  DateEdit DESC
4

2 回答 2

3

尝试按两者排序,例如:ORDER BY Rating DESC、DateEdit ASC

于 2009-02-06T06:38:47.540 回答
1

查询首先按 [Rating] 对行进行编号,然后按 [DateEdit] 对结果重新排序。可能不是你想要的。按 [RowIndex] ASC 排序应该可以解决。

ROW_NUMBER() OVER (ORDER BY [Rating] DESC) As [RowIndex]
...
ORDER BY [RowIndex]
于 2009-02-06T14:09:28.303 回答