Ottenere un valore distinto attraverso le tabelle di SQL Server 2 sindacali
-
19-09-2019 - |
Domanda
Sto cercando di ottenere tutti i valori distinti su 2 tavoli con un sindacato.
L'idea è quella di ottenere un conteggio di tutti i valori univoci nella colonna Columna senza ripete in modo che io possa avere un riepilogo di tutte le colonne che contengono un unico Columna.
Questo è quello che ho cercato (server 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
)
Soluzione
SELECT COUNT(distinct tmp.ColumnA) FROM ( (SELECT ColumnA FROM TableX WHERE x=y)
UNION (SELECT ColumnA FROM TableY WHERE y=z) ) as tmp
I distinti extra sulla TableX e Tabley non sono necessari; otterranno spogliati nella clausola tmp.ColumnA. Dichiarazione di una tabella temporanea dovrebbe eliminare l'ambiguità che potrebbe aver impedito la query da eseguire.
Altri suggerimenti
SELECT COUNT(*)
FROM
(
SELECT DISTINCT ColumnA From TableX WHERE x = y
UNION
SELECT DISTINCT ColumnA From TableY WHERE y = z
) t
Utilizzando una "unione" non tornerà duplicati. Se è stato utilizzato "UNION ALL" quindi duplicare valori Columna da ogni tabella sarebbe ritorno.
Per ottenere valori distinti nella query di unione si può provare questo
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)