52

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

このクエリは失敗します

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

何か助けはありますか?

4

4 に答える 4

78

order byandtopステートメントをサブクエリに入れます。

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
于 2011-04-05T11:34:42.970 に答える
11

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回返します)

于 2011-04-05T12:24:34.970 に答える
10
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
于 2011-04-05T11:30:01.547 に答える