2012-09-21 18 views
13

descを使用した後の結果のSQL Serverでの順序を逆にしたいとします。descを使用した後のSQL Serverの逆順

SELECT TOP 3 * FROM table ORDER BY id DESC 

結果を返し:

505 
504 
503 

しかし、その後、私はこのように見える結果を反転したい:例えば

503 
504 
505 

私は

SELECT * FROM (SELECT TOP 3 * FROM table ORDER BY id DESC) ORDER BY id ASC 

を試みたが、それはうまくいきませんでした。

+12

「うまくいかない」と言うと、どうしてうまくいかないのですか?それはあなたに別の結果をもたらしましたか?それはあなたに同じ結果(間違った順序)を与えましたか?サーバーが爆発しましたか?ラプトルはあなたの事務所に侵入しましたか? –

+0

どのバージョンのSQL Serverを使用していますか? –

答えて

20

これは、サブクエリのエイリアスを使用している限り有効です。 SELECT * FROM (SELECT TOP 3 * FROM table ORDER BY id DESC) As AliasName ORDER BY id ASC

2

は、私はあなたが副選択の別名を忘れてしまったと思う一時テーブルを作るために必要な名前が

1
SELECT * FROM (SELECT TOP 3 * FROM table ORDER BY id DESC) AS r ORDER BY r.id ASC 

SELECT q.* 
    FROM (SELECT TOP 3 * 
       FROM table 
       ORDER BY id DESC) q 
    ORDER BY q.id ASC 
2
;WITH cte 
AS 
(
    SELECT *, ROW_NUMBER() OVER(ORDER BY id DESC) rank 
    FROM table 
) 
SELECT * 
FROM cte 
WHERE rank <= 3 
ORDER BY id ASC 
+0

ちょうど質問です。このCTEはテーブル全体を選択しません。外側の選択を行うときにのみ、必要な行がフィルタリングされますか?これは大きなテーブルでは潜在的に高価なものではありませんかたぶん、私は間違っており、CTEは外側の選択が実行されるまで実行されません。これは遅延実行のようなものです。 –

+1

@SachinKainth - SQL Serverは、計画に「TOP」を追加する予定はありません。しかし、これは最終注文として 'ORDER BY id ASC'を持っているはずです。 –

4

AS使用して持ってそれを考え出し

SELECT * 
FROM (
    SELECT TOP 3 * 
    FROM table 
    ORDER BY id DESC 
) s 
ORDER BY id ASC 
0
SELECT * 
FROM (
    SELECT * 
    FROM table 
    ORDER BY ID DESC 
) TMP 
ORDER BY TMP.ID ASC 
関連する問題