Comment 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?
Mettre votre order by
et top
dans les 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
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
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 sera pas comme 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, tandis que la vôtre retournerait deux fois la même ligne)
SELECT TOP 1 Id as sameColumn,Name FROM Locations
UNION ALL
SELECT TOP 1 Id as sameColumn,Name FROM Locations ORDER BY sameColumn DESC