2011-04-06 8 views
7

समूह करते समय पहली मान प्राप्त कर रहा है मेरे पास कॉलम वाला एक सारणी है जिसमें कई अलग-अलग मानों के प्रत्येक मान के लिए आवश्यक रूप से विशिष्ट मान और कॉलम बी नहीं है। मैं परिणाम प्राप्त करना चाहता हूं जिसमें प्रत्येक बार केवल एक बार प्रदर्शित होने और प्रत्येक के उस मूल्य के लिए बी के पहले पाए गए मान प्राप्त करना है। एसक्यूएल सर्वर 2000 में मैं इसे कैसे कर सकता हूं?एसक्यूएल सर्वर

उदाहरण तालिका:

a b 
1 aa 
1 bb 
2 zz 
3 aa 
3 zz 
3 bb 
4 bb 
4 aa 

वांटेड परिणाम:

a b 
1 aa 
2 zz 
3 aa 
4 bb 

इसके अलावा, मैं जोड़ना होगा कि स्तंभ ख में मानों सभी पाठ मान हैं। मैंने इसे प्रतिबिंबित करने के लिए उदाहरण अपडेट किया। धन्यवाद

उत्तर

7

एसक्यूएल तालिका पंक्तियों द्वारा क्रमबद्ध करने के बारे में नहीं जानता है। आपको टेबल संरचना में ऑर्डर शुरू करने की आवश्यकता है (आमतौर पर एक आईडी कॉलम का उपयोग करके)। जिसके अनुसार, एक बार आप एक आईडी स्तंभ है, यह नहीं बल्कि आसान है:

SELECT a, b FROM test WHERE id in (SELECT MIN(id) FROM test GROUP BY a) 

ऐसा करने का एक तरीका होता हो सकता है, आंतरिक एसक्यूएल सर्वर कार्यों का उपयोग कर। लेकिन यह समाधान पोर्टेबल है और एसक्यूएल को जानता है जो किसी भी आसानी से समझ में आता है।

+2

+1 इस तथ्य का जिक्र करते हुए कि आप रिकॉर्ड के क्रम को आवेषण के आदेश के समान नहीं मान सकते हैं। –

+0

सीटीई मार्ग का उपयोग करें। ऐसा करने के लिए यह एक और अधिक अक्षम तरीका है। –

8
;with cte as 
    (
    select *, 
    row_number() over(partition by a order by a) as rn 
    from yourtablename 
    )  
    select 
a,b 
from cte 
where rn = 1 
+0

शानदार काम करता है, row_number() फ़ंक्शन के बारे में नहीं पता था! –

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