Объединение ORDER BY AND UNION в SQL Server - PullRequest
43 голосов
/ 05 апреля 2011

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

Этот запрос не выполняется

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

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

Ответы [ 4 ]

65 голосов
/ 05 апреля 2011

Поместите ваши операторы 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
9 голосов
/ 05 апреля 2011
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
8 голосов
/ 05 апреля 2011

Если вы работаете на 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

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

5 голосов
/ 01 августа 2017
SELECT TOP 1 Id as sameColumn,Name FROM Locations 
UNION ALL
SELECT TOP 1 Id as sameColumn,Name FROM Locations ORDER BY sameColumn DESC
...