sql - SQL 中多级关系文件的返回计数
问题描述
有 3 个表,业务可以有很多客户,客户可以有很多站点。
我需要一份报告,列出每个企业的客户和网站总数。
SELECT bus.BusinessID,
cb.CustomerBusinessID,
s.SiteID FROM [dbo].[Business] bus
left outer join CustomerBusiness cb on cb.BusinessID = bus.BusinessID
left outer join Site s on cb.CustomerID = s.CustomerID
Where bus.RecordStatus = 'A'
and cb.RecordStatus = 'A'
and s.Sitestatus= 'A'
Order by Name
我已经加入了文件(见上文),我得到了很多行,但我现在不明白如何获得企业的列表及其总数。
请参阅下面的一些数据。
所以对于企业 ID 33(我还没有包括名称,应该有 3 个客户和 10 个站点)。
任何帮助将不胜感激。
这是我在对 Kate 提供的代码稍作更改后开始使用的代码。
SELECT bus.Name as Business_Name,
count(distinct tb.TruckerID) AS num_Truckers,
count(distinct cb.CustomerBusinessID) AS num_Customers,
count(distinct s.SiteID) AS num_Sites -- distinct probably unnecessary
FROM [dbo].[Business] bus
LEFT JOIN TruckerBusiness tb
ON tb.BusinessID = bus.BusinessID AND tb.RecordStatus = 'A'
LEFT JOIN CustomerBusiness cb
ON cb.BusinessID = bus.BusinessID AND cb.RecordStatus = 'A'
LEFT JOIN Site s
ON cb.CustomerID = s.CustomerID AND s.Sitestatus= 'A'
WHERE bus.RecordStatus = 'A'
Group BY bus.Name;
解决方案
最简单的方法可能是count(distinct)
:
SELECT bus.BusinessID,
count(distinct cb.CustomerBusinessID) AS num_businesses,
count(distinct s.SiteID) AS num_sites -- distinct probably unnecessary
FROM [dbo].[Business] bus LEFT JOIN
CustomerBusiness cb
ON cb.BusinessID = bus.BusinessID AND
cb.RecordStatus = 'A' LEFT JOIN
Site s
ON cb.CustomerID = s.CustomerID AND
s.Sitestatus = 'A'
WHERE bus.RecordStatus = 'A'
GROUP BY bus.BusinessID, Name
ORDER BY Name;
请注意,我将过滤器cb
移至s
子句on
。否则,LEFT JOIN
s 将变为INNER JOIN
s,因此没有客户的企业或没有站点的客户将不会包含在结果中。
推荐阅读
- java - 除了 .isSelected() 是否有任何其他方法来检查单选按钮是否被选中
- php - 该文件未创建 - wkhtmltopdf
- javascript - 带有 React、THREE、Parcel 和 react-three-fiber 的 OBJLoader
- apache-cloudstack - 尝试分配存储时 Cloudstack 启动实例错误
- oauth - JWT:多客户端身份验证服务器,停止在不同客户端之间使用 jwt?
- spring - 为什么在顶级更新时第二级嵌套列表上的@NotNull 验证失败?
- android-recyclerview - 我可以使用类的 hashCode 函数来验证两者在 diffutils 回调中是否具有相同的 areContentsTheSame 值?
- postgresql - 如何在 mac 上导入 DVD 租赁数据库。postgres 教程只提供了 windows 的说明
- google-data-studio - Google Datastudio:几个同名字段的总和,如何定位特定字段
- excel - 我们有许多 EBCDIC 格式的大型机文件,Python 中有没有办法将大型机文件解析或转换为 csv 文件或文本文件?