2011-04-05 21 views

cevap

52

alt sorguları içine order by ve top ifadeleri koyun:

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 
+0

Keith ben SQL Server 2005 kullanıyorsanız ve am ben ne zaman size önerdiği gibi ben almak aşağıdaki hata, ORDER BY görünüm, satır içi işlevler, türetilen tablolar, alt sorgular ve ortak tablo ifadeleri geçersiz, TOP veya FOR XML için de belirtilmemişse. ı aşağıdakileri deneyin zaman , '* ( \t SEC * CTEWithNDCNotNull NDC ASC İLE sırasından) NDCNotNull Birliği gibi SELECT * FROM NDCNull A.Ş. ( \t SELECT * GPI ASC İLE CTEWithNDCNull SİPARİŞ) SEÇ Bunu nasıl düzeltirim? –

+1

@peplamb "select" alt sorgusundan sonra 'top' belirtmelisiniz. Kaç tane satır istediğinizi belirtmeden bir "sendika" düzenleyemezsiniz. – Keith

7
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

daha sonra SQL Server 2005 veya üzerinde çalışıyorsanız:

; 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 

tek yer bu won' Tablodaki tek bir satır varsa (bu durumda cevabım bir satır döndürür, oysa sizinki aynı satırı iki kez döndürür) orijinal sorgudaki gibi olmalısınız

+0

İyi bir alternatif cevap, eğer send sendeni ile 'sendika' değiştirirseniz benimki de bir satır döndürebilir. Sorgu analizöründe bunları karşılaştırmaya değebilir. – Keith

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

Bu, mevcut cevaplardan nasıl farklı? – TheGameiswar

+0

Önce sendikaları kullanmak için aynı sütun isimlerine sahip olmalıyız. Bu yüzden, her iki görünümde de aynı takma adı kullanıyorum. –

İlgili konular