2011-05-25 2 views
1

Je voudrais obtenir les 10 premières données d'une table qui doit être triée dans l'ordre croissant dans une requête externe. Voici le pseudo-code de la requête. Quelles sont les options autres que l'utilisation de fonctions de table valorisées?Trier par sur une vue en ligne

select * from (select top 10 tour_date from tourtable order by tour_date desc) order by tour_date asc

Répondre

1

Votre requête comme écrit devrait fonctionner, il suffira d'avoir un alias de la sous-requête:

select * 
    from (select top 10 tour_date from tourtable order by tour_date desc) t 
    order by tour_date asc 

Une autre alternative , en supposant SQL Server 2005+:

SELECT t.tour_date 
    FROM (SELECT tour_date, ROW_NUMBER() OVER(ORDER BY tour_date DESC) AS RowNum 
       FROM tourtable) t 
    WHERE t.RowNum <= 10 
    ORDER BY t.tour_date ASC 

qui pourrait aussi être écrit avec un CTE:

WITH cteRowNum AS (
    SELECT tour_date, ROW_NUMBER() OVER(ORDER BY tour_date DESC) AS RowNum 
     FROM tourtable 
) 
SELECT tour_date 
    FROM cteRowNum 
    WHERE RowNum <= 10 
    ORDER BY tour_date ASC 
0

Testé dans un contexte non tsql:

select * from (select tour_date from tourable order by tour_date desc limit 10) a order by tour_date asc 
Questions connexes