after - sql server union order of select
Combinando ORDER BY AND UNION en SQL Server (4)
¿Cómo puedo obtener el primer registro de una tabla y el último registro de una tabla en un conjunto de resultados?
Esta consulta falla
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id
UNION ALL
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id DESC
¿Alguna ayuda?
Ponga su order by
top
declaraciones en subconsultas:
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
Si está trabajando en SQL Server 2005 o posterior:
; 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
El único lugar donde esto no será como su consulta original es si solo hay una fila en la tabla (en cuyo caso mi respuesta arroja una fila, mientras que la suya devolvería la misma fila dos veces)
SELECT TOP 1 Id as sameColumn,Name FROM Locations
UNION ALL
SELECT TOP 1 Id as sameColumn,Name FROM Locations ORDER BY sameColumn DESC
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