如何将table_1的数据转置插入到已创建的table_2中?
解决方案
你需要将table_1的行数据转成列结构后插入table_2,不需要动态生成单条插入语句,而是通过条件聚合行转列后一次性插入所有行:
INSERT INTO table_2 (id, name, address, state) SELECT id, -- 匹配path为name的curr_value,无则返回null MAX(CASE WHEN path = 'name' THEN curr_value END) AS name, -- 匹配path为address的curr_value,无则返回null MAX(CASE WHEN path = 'address' THEN curr_value END) AS address, -- state列无对应数据,直接设为null NULL AS state FROM table_1 GROUP BY id;
说明
- GROUP BY id:按
table_1的id分组,确保每个id对应table_2的一行数据 - CASE WHEN + MAX:每个分组内,针对指定
path提取对应curr_value,没有匹配的path时自动返回null;用MAX是因为每个id在同一个path下只有一条数据,聚合后会保留有效值 - 直接插入:转列后的结果集直接插入
table_2,完全匹配目标表的结构
你之前的写法错误在于生成了多条仅插入单列的语句,这会导致table_2的每行只有单个字段有值,且无法对应正确的id关联。
内容的提问来源于stack exchange,提问作者granger
相关产品推荐
相关产品推荐

