Teradata中实现客户表与日历表交叉连接,生成全量客户-日期记录
Teradata实现客户与日历日期全量关联方案
要实现每个客户对应日历表中所有日期生成一条记录,本质是生成两个表的笛卡尔积,在Teradata中通过**交叉连接(CROSS JOIN)**即可直接实现,它会返回两个表所有行的组合结果。
实现SQL代码
SELECT c.Date, cust.ID, cust.Name, cust.Country FROM Calendar c CROSS JOIN Customer cust;
表结构与数据说明
Calendar表(日历表)
| Date |
|---|
| 2024-01-01 |
| 2024-01-02 |
| 2024-01-03 |
| ... |
Customer表(客户表)
| ID | Name | Country |
|---|---|---|
| 101 | Mickey Mouse | France |
| 102 | Minnie Mouse | France |
| 103 | Daffy Duck | Spain |
| ... | ... | ... |
预期结果示例
| Date | ID | Name | Country |
|---|---|---|---|
| 2024-01-01 | 101 | Mickey Mouse | France |
| 2024-01-02 | 101 | Mickey Mouse | France |
| 2024-01-01 | 102 | Minnie Mouse | France |
| 2024-01-02 | 102 | Minnie Mouse | France |
| ... | ... | ... | ... |
注意事项
- 交叉连接会生成大量数据,数据量等于
日历表行数 × 客户表行数,如果两个表数据量较大,建议添加过滤条件(比如限定日期范围WHERE c.Date BETWEEN '2024-01-01' AND '2024-01-31')来减少输出数据量,避免性能问题。 - 确保Calendar表中的Date字段格式为
yyyy-mm-dd,与需求一致,避免日期格式转换错误。
内容的提问来源于stack exchange,提问作者seaside_escape
相关产品推荐
相关产品推荐

