1

内部クエリの order by 句に大きな問題があります。
このクエリを使用して、データベースからページングされた結果を取得します。

;WITH ItemsRank AS
(
select
ROW_NUMBER() OVER(ORDER BY t.CreatedOnDate) AS RowNum, 
t.ItemId
from Tickets t
where t.CompanyId = @CompanyId
group by t.ItemId ...

order by t.CreatedOnDate desc -- this makes me trouble

) ,x as (
select ItemsRank.*, 
c.CommentText ...

WHERE RowNum > @p_From
    AND RowNum <= @p_From + 50
)
select * from x where RowNumComment <= 4


クエリが大きいため、すべての選択、結合、グループなどを削除し
ました。クエリの最後で注文すると、機能しますが、期待どおりではありません。
クエリの最初の部分は、降順で上位 50 件の結果を取得する必要があるためです。

これは私が得るエラーです:

TOPまたはFOR XMLも指定されていない限り、ビュー、インライン関数、派生テーブル、サブクエリ、および共通テーブル式では、ORDER BY句は無効です。

私は何を間違っていますか?
このクエリを修正して、クエリの最初の部分で注文されたアイテムを取得することはできますか?

4

2 に答える 2

3

ORDER BYエラーが示すように、CTEでは使用できません。

それORDER BYは必要ありません。OVER節で順序を指定します。ORDER BY RowNum最終クエリでできます。

于 2013-01-06T13:12:41.097 に答える
1

エラー自体が、使用できない理由に関するすべての情報を提供します... :) @flemが言ったように。これを試して、必要に応じて設定してください。

ROW_NUMBER() OVER(ORDER BY t.CreatedOnDate desc) AS RowNum, 

または、CTEwithoutを作成してからwith をorder by使用することもできます。この記事の詳細をお読みください。selectorder by

于 2013-01-06T13:22:51.580 に答える