Pergunta

Eu estou tentando obter todos os valores distintos por 2 mesas usando uma união.

A idéia é obter uma contagem de todos os valores exclusivos na coluna Columna sem repetições para que eu possa obter um somatório de todas as colunas que contêm uma columna único.

Isto é o que eu tentei (servidor SQL 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
)
Foi útil?

Solução

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

Os distincts extra em TableX e Tabley não são necessárias; eles vão se despojado na cláusula tmp.ColumnA. Declarando uma tabela temporária deve eliminar a ambiguidade que poderia ter impedido sua consulta de execução.

Outras dicas

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

Usando uma "união" não retornará duplicatas. Se você usou "UNION ALL", em seguida, duplicar valores columna de cada tabela seria retorno.

Para obter valores distintos na União consulta você pode tentar este

Select distinct AUnion.Name,AUnion.Company from (SELECT Name,Company from table1 UNION SELECT Name,Company from table2)AUnion
SELECT DISTINCT Id, Name
FROM   TableA
UNION ALL
SELECT DISTINCT Id, Name
FROM   TableB
WHERE  TableB.Id NOT IN (SELECT Id FROM TableA)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top