我试图用联盟获得跨越2个表中的所有不同的值。

我们的想法是获得在columnA列中的所有唯一值的计数不重复,这样我可以得到包含唯一columnA所有列的总和。

这是我的尝试(SQL Server速成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
)
有帮助吗?

解决方案

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额外distincts是不必要的;他们将获得剥夺的tmp.ColumnA子句。声明临时表要消除可能已经阻止您的查询从执行的模糊性。

其他提示

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值将被返回。

要在联合查询得到不同的值,你可以试试这个

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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top