我有一个场景,其中联系人可以是所有者和/或建造者,或两者都不是。数据位于两个单独的表中,例如:
SELECT Contacts.Id, count(Owners.Id) AS [Owner Count]
FROM Contacts INNER JOIN Owners ON Contacts.Id = Owners.Id
GROUP BY Contacts.Id, Owners.Id
和
SELECT Contacts.Id, count(Builders.Id) AS [Builder Count]
FROM Contacts INNER JOIN Builders ON Contacts.Id = Builders.Id
GROUP BY Contacts.Id, Builders.Id
由于两个select语句都有共同的Contact.Id,我希望看到结果显示为:
Contact Id | Owner Count | Builder Count |
3043 | 1 | 2 |
4011 | null | 1 |
4045 | null | null |
5011 | 4 | null |
我尝试了一些变体,最接近的我是一个UNION,最终为每个Contact Id显示两行,一行为Owner,另一行为Builder,而不是组合成一行。 / p>
提前致谢!
答案 0 :(得分:0)
使用Left Outer Join
:
Select a.Id, b.[Owner Count], c.[Builder Count]
From
(
SELECT Id From Contacts
)a Left Outer Join
(
SELECT Contacts.Id, count(Owners.Id) AS [Owner Count]
FROM Contacts INNER JOIN Owners ON Contacts.Id = Owners.Id
GROUP BY Contacts.Id, Owners.Id
) b On a.Id = b.Id Left Outer Join
(
SELECT Contacts.Id, count(Builders.Id) AS [Builder Count]
FROM Contacts INNER JOIN Builders ON Contacts.Id = Builders.Id
GROUP BY Contacts.Id, Builders.Id
) c on a.Id = c.Id
答案 1 :(得分:0)
您可以实现LEFT JOIN
和Owners
至Builders
Contacts
所需的工作
SELECT Contacts.Id,
count(Owners.Id) AS [Owner Count],
count(Builders.Id) AS [Builder Count]
FROM Contacts
LEFT JOIN Owners ON Contacts.Id = Owners.Id
LEFT JOIN Builders ON Contacts.Id = Builders.Id
GROUP BY Contacts.Id