如何使用INSERT语句将Table 2数据匹配合并至Table 1?
将Table 2数据匹配合并到Table 1的正确INSERT实现方式
我有两张数据表,希望通过INSERT语句将Table 2的数据匹配合并到Table 1中。
Table 1 结构及数据
| date | cat_1 | cat_2 | cat_3 |
|---|---|---|---|
| 2020-01-02 | 1 | 2 | 0 |
| 2020-01-03 | 2 | 0 | 3 |
Table 2 结构及数据
| date | cat_type | cat_count |
|---|---|---|
| 2020-01-04 | 2 | 1 |
| 2020-01-04 | 3 | 2 |
我尝试了以下代码但存在问题,寻求正确的实现方式:
INSERT INTO table 1 (FILE_DATE, cat_1, cat_2,cat_3) FROM (SELECT DATE, CASE WHEN cat_type = 2 THEN 'INSERT CAT_COUNT INTO CAT_2) END FROM TABLE_2)
正确实现代码
INSERT INTO table_1 (date, cat_1, cat_2, cat_3) SELECT date, SUM(CASE WHEN cat_type = 1 THEN cat_count ELSE 0 END) AS cat_1, SUM(CASE WHEN cat_type = 2 THEN cat_count ELSE 0 END) AS cat_2, SUM(CASE WHEN cat_type = 3 THEN cat_count ELSE 0 END) AS cat_3 FROM table_2 GROUP BY date;
问题说明及修正点
- 表名与字段名错误:原代码中表名
table 1包含空格,需改为合法标识符table_1;Table 1的日期字段是date,不是FILE_DATE,需严格匹配字段名。 - CASE语句语法错误:原代码的CASE语句未正确闭合,且错误用字符串描述操作,应直接通过CASE将不同
cat_type的cat_count映射到对应列,无匹配的类型用0填充。 - 分组处理需求:Table 2中同一日期可能对应多个
cat_type,需通过GROUP BY date将同一日期的分类数据汇总,生成与Table 1结构一致的单行数据后再插入。
内容的提问来源于stack exchange,提问作者edcoder
相关产品推荐
相关产品推荐

