after sql sql-server sql-order-by union-all

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