Obtenir une valeur distincte dans 2 tables syndicales de serveur sql
-
19-09-2019 - |
Question
Je suis en train d'obtenir toutes les valeurs distinctes sur 2 tables à l'aide d'une union.
L'idée est d'obtenir un compte de toutes les valeurs uniques dans la colonne COLUMNA sans répétitions pour que je puisse obtenir une somme de toutes les colonnes qui contiennent un COLUMNA unique.
est ce que j'ai essayé (serveur 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
)
La solution
SELECT COUNT(distinct tmp.ColumnA) FROM ( (SELECT ColumnA FROM TableX WHERE x=y)
UNION (SELECT ColumnA FROM TableY WHERE y=z) ) as tmp
Les TableX supplémentaires sur concepts distincts et TABLEY ne sont pas nécessaires; ils se dépouillèrent dans la clause tmp.ColumnA. Déclarant une table temporaire devrait éliminer l'ambiguïté qui pourrait avoir empêché votre requête d'exécution.
Autres conseils
SELECT COUNT(*)
FROM
(
SELECT DISTINCT ColumnA From TableX WHERE x = y
UNION
SELECT DISTINCT ColumnA From TableY WHERE y = z
) t
L'utilisation d'un « UNION » ne reviendra pas en double. Si vous avez utilisé « UNION ALL » puis dupliquer les valeurs COLUMNA de chaque table SERAIT retour.
Pour obtenir des valeurs distinctes dans la requête Union, vous pouvez essayer
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)