web-dev-qa-db-ja.com

SQL ServerでのORDER BYとUNIONの組み合わせ

1つの結果セットでテーブルの最初のレコードとテーブルの最後のレコードを取得するにはどうすればよいですか?

このクエリは失敗します

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

助けがありますか?

46
Faizal Balsania

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
67
Keith
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
9
RichardTheKiwi

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

これが元のクエリのようにならない唯一の場所は、テーブルに行が1つしかない場合です(この場合、私の答えは1行を返しますが、同じ行を2回返します)

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