49 votes

Combiner ORDER BY ET UNION dans SQL Server

Comment puis-je obtenir le premier enregistrement d'une table et le dernier enregistrement d'une table dans un jeu de résultats ?

Cette requête échoue

 SELECT TOP 1 Id,Name FROM Locations ORDER BY Id
UNION ALL
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id DESC

De l'aide?

75voto

Keith Points 46288

Mettez vos order by et top dans des sous-requêtes :

 select first.Id, first.Name 
from (
    select top 1 * 
    from Locations 
    order by Id) first
union all
select last.Id, last.Name 
from (
    select top 1 * 
    from Locations 
    order by Id desc) last

10voto

RichardTheKiwi Points 58121
select * from (
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id) X
UNION ALL
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id DESC

9voto

Damien_The_Unbeliever Points 102139

Si vous travaillez sur SQL Server 2005 ou version ultérieure :

 ; WITH NumberedRows as (
    SELECT Id,Name,
       ROW_NUMBER() OVER (ORDER BY Id) as rnAsc,
       ROW_NUMBER() OVER (ORDER BY Id desc) as rnDesc
    FROM
        Locations
)
select * from NumberedRows where rnAsc = 1 or rnDesc = 1

Le seul endroit où cela ne ressemblera pas à votre requête d'origine est s'il n'y a qu'une seule ligne dans le tableau (auquel cas ma réponse renvoie une ligne, alors que la vôtre renverrait la même ligne deux fois)

5voto

Siddappa Walake Points 110
SELECT TOP 1 Id as sameColumn,Name FROM Locations 
UNION ALL
SELECT TOP 1 Id as sameColumn,Name FROM Locations ORDER BY sameColumn DESC

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X