You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于另一张表的日期匹配重复表行,使每个ID对应完整日期序列

需求说明

需要将Table A转换为Table C:为每个id补全Table B日期列中的所有日期,原Table A中没有对应日期的行,Amount字段填充null,最终每个id对应的行数与Table B的日期数量一致。

原始表Table A

idDatesAmount
101/09/20104
101/03/20113
201/12/20113
301/03/20111
301/06/20111
301/09/20111

日期参考表Table B

Dates
01/09/2010
01/12/2010
01/03/2011
01/06/2011
01/09/2011

目标表Table C

idDatesAmount
101/09/20104
101/12/2010null
101/03/20113
101/06/2011null
101/09/2011null
201/09/2010null
201/12/2010null
201/03/20113
201/06/2011null
201/09/2011null
301/09/2010null
301/12/2010null
301/03/20111
301/06/20111
301/09/20111

实现方法(SQL)

通过生成所有id与Table B日期的笛卡尔积,再左连接原Table A获取对应Amount值,未匹配的自动填充null,代码如下:

-- 生成所有id与日期的全组合
WITH all_id_dates AS (
    SELECT DISTINCT a.id, b.Dates
    FROM TableA a
    CROSS JOIN TableB b
)
-- 左连接匹配原始数据,补全缺失值
SELECT aid.id, aid.Dates, a.Amount
FROM all_id_dates aid
LEFT JOIN TableA a 
    ON aid.id = a.id 
    AND aid.Dates = a.Dates
ORDER BY aid.id, aid.Dates;

逻辑说明

  1. CROSS JOIN 生成每个id与Table B中所有日期的组合,确保每个id都覆盖所有需要的日期;
  2. LEFT JOIN 关联原Table A,只有当id和日期都匹配时才会获取到Amount,否则为null;
  3. 最后按id和日期排序,得到与Table C一致的结果。

内容的提问来源于stack exchange,提问作者HaagenDaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:06:02