2009-12-11 13 views
10

में एक अलग मूल्य प्राप्त करना मैं एक संघ का उपयोग कर 2 टेबलों में सभी विशिष्ट मान प्राप्त करने की कोशिश कर रहा हूं।2 यूनियन एसक्यूएल सर्वर टेबल

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

यह है कि मैं क्या करने की कोशिश की (SQL सर्वर एक्सप्रेस 2008)

select 
    count(Distinct ColumnA) 
from 
( 
    select Distinct ColumnA as ColumnA from tableX where x = y 
    union 
    select Distinct ColumnA as ColumnA from tableY where y=z 
) 
+2

कोशिश कर सकते हैं और क्या वास्तव में काम नहीं कर रहा क्वेरी? आपके पास कुछ अनावश्यक डिस्टिंट हैं लेकिन अन्यथा यह काम करना चाहिए। –

+0

अब तक आप क्या प्राप्त कर रहे हैं जो आपको विश्वास दिलाता है कि आपके पास क्या गलत है? –

उत्तर

17
SELECT COUNT(distinct tmp.ColumnA) FROM ((SELECT ColumnA FROM TableX WHERE x=y) 
UNION (SELECT ColumnA FROM TableY WHERE y=z)) as tmp 

TableX और TableY पर अतिरिक्त distincts आवश्यक नहीं हैं है, वे tmp.ColumnA खंड में छीन लिया जाएगा। एक अस्थायी तालिका घोषित करने से उस अस्पष्टता को खत्म करना चाहिए जो आपकी क्वेरी को निष्पादित करने से रोक सकता है।

+8

COUNT में DISTINCT (DISTINCT आवश्यक नहीं है क्योंकि 'यूनियन' डुप्लिकेट को हटा देता है –

+0

यह मेरे लिए काम करता है। मुझे यूनियन के चयन कथन – rockit

+0

@OMG: गुड कॉल के अंत में कॉलम ए के रूप में जोड़ना पड़ा। सहायता –

10
SELECT COUNT(*) 
FROM 
(
SELECT DISTINCT ColumnA From TableX WHERE x = y 
UNION 
SELECT DISTINCT ColumnA From TableY WHERE y = z 
) t 

"यूनियन" का उपयोग करके डुप्लीकेट नहीं लौटाएंगे। यदि आपने "यूनियन ऑल" का उपयोग किया है तो प्रत्येक तालिका से कॉलम ए मान डुप्लिकेट करें।

+2

यूनियन की वजह से DISTINCT आवश्यक नहीं है, जो डुप्लिकेट को हटा देता है। 'यूनियन ऑल' ** ** ** डुप्लीकेट को हटा नहीं देता है –

+0

सच - मैंने सोचा कि इसमें अलग-अलग शामिल हो सकते हैं अधिक निष्पादक (निष्पादन योजना अलग है) - इसे साबित/अस्वीकार करने के लिए थोड़ा और परीक्षण की आवश्यकता होगी। पुन: यूनियन सब, मैंने यही कहा :) – AdaTheDev

0

प्राप्त करने के लिए संघ में अलग-अलग मान आप इस

Select distinct AUnion.Name,AUnion.Company from (SELECT Name,Company from table1 UNION SELECT Name,Company from table2)AUnion 
1
SELECT DISTINCT Id, Name 
FROM TableA 
UNION ALL 
SELECT DISTINCT Id, Name 
FROM TableB 
WHERE TableB.Id NOT IN (SELECT Id FROM TableA) 
+0

Pleas आपके कोड पर कुछ टिप्पणियां जोड़ें – Observer

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