2011-04-05 16 views
32

में ऑर्डर और यूनियन का संयोजन संयोजन मैं एक तालिका के पहले रिकॉर्ड और एक परिणाम-सेट में तालिका का अंतिम रिकॉर्ड कैसे प्राप्त कर सकता हूं?एसक्यूएल सर्वर

इस क्वेरी में विफल रहता है

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

किसी भी मदद की?

उत्तर

52

उप प्रश्नों में अपने 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 
+0

कीथ मैं SQL सर्वर 2005 का उपयोग कर रहा है और जब मैं करता हूँ आप ने सुझाव दिया के रूप में मैं प्राप्त निम्न त्रुटि, आदेश BY खंड दृश्य, इनलाइन काम करता है, व्युत्पन्न टेबल, सबक्वेरी, और आम मेज भाव में अमान्य है, जब तक टॉप या एक्सएमएल के लिए भी निर्दिष्ट नहीं किया जाता है। जब मैं निम्नलिखित की कोशिश, 'द्वारा चुने जाने वाले * से ( \t चुनें * से CTEWithNDCNotNull द्वारा एनडीसी एएससी आदेश) के रूप में NDCNotNull यूनिअन चुनें * NDCNull के रूप में ( \t चुनें * द्वारा GPI एएससी CTEWithNDCNull आदेश से) ' मैं इसे कैसे ठीक करूं? –

+1

@peplamb आपको उप-क्वेरी 'चयन' के बाद' शीर्ष 'निर्दिष्ट करना होगा। आप कितनी पंक्तियां चाहते हैं यह निर्दिष्ट किए बिना 'यूनियन' को सॉर्ट नहीं कर सकते। – 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

आप SQL सर्वर 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 

केवल जगह यह जीता ' आपकी मूल क्वेरी की तरह नहीं है यदि तालिका में केवल एक पंक्ति है (जिस स्थिति में मेरा उत्तर एक पंक्ति देता है, जबकि आपका दो बार एक ही पंक्ति वापस करेगा)

+0

अच्छा वैकल्पिक जवाब, हालांकि यदि आप 'यूनियन' के साथ 'यूनियन' को प्रतिस्थापित करते हैं तो भी मैं एक पंक्ति वापस कर सकता हूं। यह क्वेरी विश्लेषक में उनकी तुलना करने लायक हो सकता है। – 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

यह मौजूदा उत्तरों से अलग कैसे है? – TheGameiswar

+0

सबसे पहले हमें यूनियनों का उपयोग करने के लिए समान कॉलम नाम होने की आवश्यकता है। इसलिए मैंने सॉर्टिंग के लिए दोनों विचारों में एक ही उपनाम का उपयोग किया। –

संबंधित मुद्दे