Получение отличного значения в 2-х таблицах объединенного sql-сервера

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

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

Это то, что я пробовал (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
)

person rockit    schedule 11.12.2009    source источник
comment
А что именно не работает? У вас есть лишние DISTINCT, но в остальном это должно сработать.   -  person David M    schedule 12.12.2009
comment
Что вы зашли так далеко, что считаете то, что у вас есть, неверно?   -  person Sonny Boy    schedule 12.12.2009


Ответы (3)


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 не нужны; они будут удалены в предложении tmp.ColumnA. Объявление временной таблицы должно устранить двусмысленность, которая могла помешать выполнению вашего запроса.

person Jim Dagg    schedule 11.12.2009
comment
DISTINCT в COUNT (DISTINCT не требуется, потому что UNION удаляет дубликаты - person OMG Ponies; 12.12.2009
comment
Это сработало для меня. Мне просто пришлось добавить как ColumnA в конце оператора union'd select - person rockit; 12.12.2009
comment
@OMG: Хороший звонок. Спасибо за помощь. - person Jim Dagg; 12.12.2009

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 из каждой таблицы.

person AdaTheDev    schedule 11.12.2009
comment
DISTINCT не требуется из-за UNION, который удаляет дубликаты. UNION ALL не удаляет дубликаты - person OMG Ponies; 12.12.2009
comment
Верно - я просто подумал, что включение отдельного в него может быть более производительным (план выполнения другой) - потребует немного большего тестирования, чтобы доказать / опровергнуть это. Re: UNION ALL, вот что я сказал :) - person AdaTheDev; 12.12.2009

Чтобы получить различные значения в запросе Union, вы можете попробовать это

Select distinct AUnion.Name,AUnion.Company from (SELECT Name,Company from table1 UNION SELECT Name,Company from table2)AUnion
person Prateek Gupta    schedule 21.07.2015