Подтвердить что ты не робот

Объединение ORDER BY AND UNION в SQL Server

Как получить первую запись таблицы и последней записи таблицы в одном наборе результатов?

Этот запрос терпит неудачу

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

Любая помощь?

4b9b3361

Ответ 1

Поместите свои операторы order by и top в подзапросы:

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

Ответ 2

Если вы работаете с SQL Server 2005 или более поздней версией:

; 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

Единственное место, которое не будет похоже на ваш исходный запрос, - это если в таблице есть только одна строка (в этом случае мой ответ возвращает одну строку, тогда как ваш будет возвращать одну и ту же строку дважды)

Ответ 3

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

Ответ 4

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