2009-12-11 10 views
10

Я пытаюсь получить все различные значения в 2 таблицах с помощью объединения.Получение отдельного значения в двух таблицах серверов SQL Server

Идея состоит в том, чтобы получить счет всех уникальных значений в столбце columnA без повторов, чтобы я мог получить суммирование всех столбцов, содержащих уникальный столбец A.

Это то, что я попытался (SQL Server Express 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

А что не работает точно? У вас есть некоторые лишние DISTINCT, но в противном случае это должно сработать. –

+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 

Лишние distincts на TableX и Tabley не являются необходимыми; они будут разделены в предложении tmp.ColumnA. Объявление временной таблицы должно устранить двусмысленность, которая могла бы помешать выполнению вашего запроса.

+8

DISTINCT в COUNT (DISTINCT не требуется, потому что 'UNION' удаляет дубликаты –

+0

Это работало для меня. Мне просто нужно было добавить в качестве столбца ColumnA в конце инструкции union select select – 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 

Использование «UNION» не будет возвращать дубликаты. Если вы использовали «UNION ALL», то дублируйте значения ColumnA из каждой таблицы.

+2

DISTINCT не требуется из-за UNION, который удаляет дубликаты. 'UNION ALL' делает ** не ** удаляет дубликаты –

+0

Правда - я просто думал, что в нем могут быть отдельные Re: UNION ALL, вот что я сказал :) – 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

Просьба добавить комментарии к вашему коду – Observer

 Смежные вопросы

  • Нет связанных вопросов^_^