0

MSSQLで基本的なページングを実行しようとしています。私が抱えている問題は、(潜在的に)同様の値を持つ行でページングを並べ替えていることです。ORDERBY句は「ランダムな」結果を返しますが、これはうまく機能しません。

たとえば、

3つの行があり、それらを「評価」で並べ替えていて、すべての評価が= '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 に答える