假设我在SQL中有两个表:
Table_Alpha Table_Bravo
Id | Name Id | Name
---+------ ---+-----
1 | Alice 1 | Charlie
2 | Bob 2 | Bob
3 | Charlie 3 | Dorothy
我想将两个表合并为一个表,避免重复,并跟踪每个名称来自哪个表,如下所示:
Result
Name | Alpha | Bravo
-------+-------+------
Alice | 1 | 0
Bob | 1 | 1
Charlie| 1 | 1
Dorothy| 0 | 1
我认为我想要的查询看起来像这样:
SELECT Name, 1 AS Alpha, 0 AS Bravo FROM Table_Alpha
UNION
SELECT Name, 0 AS Alpha, 1 AS Bravo FROM Table_Bravo;
但是,上述查询将为两个表中显示的每个名称返回两行。如何编写查询以便为每个不同的名称返回一行?
答案 0 :(得分:4)
这会有用吗?
SELECT DISTINCT Name, sum(Alpha) as 'Alpha', sum(Bravo) as 'Bravo'
FROM (
SELECT Name, 1 as Alpha, 0 as Bravo from Table_Alpha
UNION
SELECT Name, 0 as Alpha, 1 as Bravo from Table_Bravo
) X
GROUP BY Name
答案 1 :(得分:0)
您可以使用FULL JOIN
,如果Name
列没有重复项,则不需要GROUP BY
:
SELECT
COALESCE(a.Name, b.Name),
CASE WHEN a.Name IS NOT NULL THE 1 ELSE 0 END AS Alpha,
CASE WHEN b.Name IS NOT NULL THE 1 ELSE 0 END AS Bravo
FROM
Table_Alpha AS a
FULL JOIN
Table_Bravo AS b
ON a.Name = b.Name ;
如果有重复:
SELECT
COALESCE(a.Name, b.Name),
COUNT(a.Name) AS Alpha,
COUNT(b.Name) AS Bravo
FROM
Table_Alpha AS a
FULL JOIN
Table_Bravo AS b
ON a.Name = b.Name
GROUP BY
COALESCE(a.Name, b.Name) ;