如何关联Trips等3张表并统计客户对应各行程的记录数?
客户与行程全组合的记录统计视图解决方案
原查询的问题在于:先通过TripRecords关联客户和行程,导致只有客户存在对应行程记录时,该行才会出现,无法生成所有客户×所有行程的全量组合。
要实现需求,核心是先生成客户与行程的全交叉组合,再关联行程记录表统计数量:
CREATE VIEW CustomerTripRecordCounts AS SELECT c.CustID, t.TripRecordID AS TripID, COUNT(tr.TripRecordID) AS TripCount FROM dbo.Customers c -- 生成所有客户与所有行程的全量配对 CROSS JOIN dbo.Trips t -- 左连接行程记录,匹配当前客户和行程的对应记录 LEFT OUTER JOIN dbo.TripRecords tr ON tr.CustID = c.CustID AND tr.TripRecordID = t.TripRecordID -- 按客户和行程分组统计 GROUP BY c.CustID, t.TripRecordID
关键说明:
CROSS JOIN:强制生成所有客户与行程的组合,确保每个客户对每个行程都有一行,新增行程后视图会自动包含新的客户-行程行。- 左连接的关联条件同时绑定
CustID和TripRecordID,精准匹配当前客户-行程对应的记录。 COUNT(tr.TripRecordID):统计有效记录数,当客户在该行程下无记录时,tr.TripRecordID为NULL,COUNT会忽略NULL返回0,符合需求。
内容的提问来源于stack exchange,提问作者Transitory
相关产品推荐
相关产品推荐

