2012-09-21 17 views
13

Kullanım sırasını kullandıktan sonra sonuçların sql sunucusunda sırasını ters çevirmek istiyorum.sql server desc order kullanımdan sonra tersine çevirme

SELECT TOP 3 * FROM table ORDER BY id DESC 

sonuçlarını döndürür:

505 
504 
503 

Ama sonra bu gibi görünmek sonuçları çevirmek istiyorum: Örneğin

503 
504 
505 

Ben

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

çalıştı ama Bu işe yaramadı, herhangi bir öneri?

+12

"Çalışmadı" derken, nasıl * işe yaramadı? Size farklı sonuçlar verdi mi? Aynı sonuçları verdi mi (yanlış sıra)? Sunucu patladı mı? Raptors ofisten mi saldırdı? –

+0

SQL Server'ın hangi sürümü üzerindesiniz? –

cevap

20

Bu alt sorguyu takmadığınız sürece çalışmalıdır. SELECT * FROM (SELECT TOP 3 * FROM table ORDER BY id DESC) As AliasName ORDER BY id ASC

2

Sana alt seçim takma unuttum düşünüyorum geçici tablo yapmak için gerekli bir isim

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

Sadece bir soru. Bu CTE tüm tabloyu seçmeyecek ve sadece dış seçim yaptığınızda istediğiniz satırları filtreleyecek mi? Bu büyük tablolar için potansiyel olarak pahalı değil mi? Belki yanlışı yapıyorum ve CTE dış seçim çalıştırılana kadar ertelenemez. –

+1

@SachinKainth - Hiçbir SQL Server plana zaten bir "TOP" ekleyecektir. Bu olsa da, son sipariş olarak 'ASLA' ID ASLA 'olmalıdır. –

4

OLARAK kullanarak var bunu anladım

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