BigQuery分组Gap Fill实现:表A按表B客户ID全量重复匹配咨询
实现多客户对应全量阶段列表的SQL方案
核心逻辑是先构造「每个客户 + 全量阶段」的基准全集,再左关联表B的业务数据做匹配,具体实现如下:
- 首先提取表B中所有去重的客户ID,和表A的全量阶段做交叉连接,生成所有客户对应的全量阶段基准数据
- 用基准数据左关联原始表B,匹配条件为客户ID和阶段编码同时一致,即可得到目标结果
完整SQL语句:
SELECT base.PStage, base.StageOrder, base.ID, b.stage FROM ( -- 构造每个客户对应全量阶段的基准全集 SELECT b_cust.ID, a.PStage, a.StageOrder FROM A CROSS JOIN (SELECT DISTINCT ID FROM B) AS b_cust ) AS base LEFT JOIN B ON base.ID = B.ID AND base.PStage = B.stage ORDER BY base.ID, base.StageOrder;
执行后输出结果会按照客户ID分组,每个客户对应完整的8条表A阶段数据,仅该客户在表B中存在的阶段会填充stage字段值,其余阶段stage字段为null。
如果需要未匹配的位置填充客户ID,只需要把b.stage替换为COALESCE(b.stage, base.ID)即可。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

