2011-12-19 20 views
13

मैं निम्न कार्य एक कठिन समय चल रहा है के साथ शामिल हों:एसक्यूएल सर्वर - भीतरी DISTINCT

select a.FirstName, a.LastName, v.District 
from AddTbl a order by Firstname 
inner join (select distinct LastName from 
      ValTbl v where a.LastName = v.LastName) 

मैं एक ValTbl पर लेकिन केवल विशिष्ट मानों के लिए शामिल हो करना चाहते हैं।

उत्तर

10

इस प्रयास करें:

select distinct a.FirstName, a.LastName, v.District 
from AddTbl a 
    inner join ValTbl v 
    on a.LastName = v.LastName 
order by a.FirstName; 

या यह (यह एक ही है, लेकिन वाक्यविन्यास अलग है):

select distinct a.FirstName, a.LastName, v.District 
from AddTbl a, ValTbl v 
where a.LastName = v.LastName 
order by a.FirstName; 
1

"का चयन करें" के बाद ऐड "अलग"।

select distinct a.FirstName, a.LastName, v.District , v.LastName 
from AddTbl a 
inner join ValTbl v where a.LastName = v.LastName order by Firstname 
2

यह वही शुरुआत में एक का चयन अलग कर नहीं है क्योंकि आप परिणाम से सभी गणना की पंक्तियों को बर्बाद कर रहे हैं।

select a.FirstName, a.LastName, v.District 
from AddTbl a order by Firstname 
natural join (select distinct LastName from 
      ValTbl v where a.LastName = v.LastName) 

कोशिश करें।

+3

एमएसएसएलएल 2008 आर 1 में 'प्राकृतिक जॉइन' गलत वाक्यविन्यास है – itsho

0

आप दूसरी तालिका के अलग-अलग मान पाने के लिए CTE उपयोग कर सकते हैं, और फिर उस में शामिल होने के पहले की मेज के साथ। आपको अंतिम नाम कॉलम के आधार पर अलग-अलग मान प्राप्त करने की भी आवश्यकता है। आप इसे LastName द्वारा विभाजित Row_Number() के साथ करते हैं, और फर्स्टनाम द्वारा क्रमबद्ध किया जाता है।

यहाँ कोड

;WITH SecondTableWithDistinctLastName AS 
(
     SELECT * 
     FROM (
        SELECT *, 
          ROW_NUMBER() OVER (PARTITION BY LastName ORDER BY FirstName) AS [Rank] 
        FROM AddTbl 
       ) 
     AS  tableWithRank 
     WHERE tableWithRank.[Rank] = 1 
) 
SELECT   a.FirstName, a.LastName, S.District 
FROM   SecondTableWithDistinctLastName AS S 
INNER JOIN  AddTbl AS a 
    ON   a.LastName = S.LastName 
ORDER BY  a.FirstName 
1

Nate मुझे लगता है कि आप वास्तव में (तुम सिर्फ सही सिंटैक्स की जरूरत है) सही अपने प्रश्न में सही जवाब के लिए एक अच्छी शुरुआत प्रदान की है,। मेरे पास यह वही समस्या थी, और उप-क्वेरी में DISTINCT डालने से वास्तव में यहां दिए गए अन्य उत्तरों की तुलना में कम महंगा था।

select a.FirstName, a.LastName, v.District 
from AddTbl a 
inner join (select distinct LastName, District 
    from ValTbl) v 
    on a.LastName = v.LastName 
order by Firstname 
संबंधित मुद्दे