Conseguir um valor distinto em mesas de servidores 2 sindicais sql
-
19-09-2019 - |
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
)
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)