在SAS EG中实现追加数据并按approval_text覆盖重复行
实现方向指引
一、数据库端直接处理(SQL方案)
如果这两个是数据库表,推荐用MERGE(或对应数据库的等价语法),这是最高效的处理方式:
核心逻辑
以approval_text作为匹配依据,对目标表DAGLIGEKORREKTIONER_lib_xlsx执行:
- 当
approval_text匹配时,用源表DAGLIGEKORREKTIONER的新数据替换目标表的旧行 - 当
approval_text不匹配时,将源表的行追加到目标表
示例代码(通用SQL语法,不同数据库有细微差异)
MERGE INTO DAGLIGEKORREKTIONER_lib_xlsx AS target USING DAGLIGEKORREKTIONER AS source ON target.approval_text = source.approval_text WHEN MATCHED THEN UPDATE SET -- 列出除approval_text外的所有需更新字段,示例: column1 = source.column1, column2 = source.column2, column3 = source.column3 -- 按实际表结构补充完整字段 WHEN NOT MATCHED THEN INSERT (approval_text, column1, column2, column3) -- 列出所有字段 VALUES (source.approval_text, source.column1, source.column2, source.column3);
注意事项
- 不同数据库语法有差异:MySQL需先给
approval_text加唯一索引,用INSERT ... ON DUPLICATE KEY UPDATE;PostgreSQL 15+支持MERGE;Oracle语法更贴近通用写法 - 确保
approval_text是唯一标识行的合理字段,避免一对多匹配的异常情况
二、脚本/ETL工具处理(以Python Pandas为例,适用于Excel文件或跨数据源场景)
如果是Excel文件或需要跨数据源处理,可通过脚本实现:
核心步骤
- 读取两个表的数据到数据帧(DataFrame)
- 删除目标表中与源表
approval_text重复的行 - 将源表数据追加到处理后的目标表
- 将合并结果写回目标文件/数据库
示例代码(Python Pandas)
import pandas as pd # 读取数据(数据库表可结合sqlalchemy库读取) target_df = pd.read_excel("DAGLIGEKORREKTIONER_lib_xlsx.xlsx") source_df = pd.read_excel("DAGLIGEKORREKTIONER.xlsx") # 移除目标表中与源表重复的行 target_df = target_df[~target_df["approval_text"].isin(source_df["approval_text"])] # 合并并重置索引 merged_df = pd.concat([target_df, source_df], ignore_index=True) # 写回目标文件(数据库表用to_sql方法) merged_df.to_excel("DAGLIGEKORREKTIONER_lib_xlsx.xlsx", index=False)
注意事项
- 确保两个表的字段名、数据类型完全一致,避免合并出错
- 处理大文件时分块读取,避免内存溢出
内容的提问来源于stack exchange,提问作者Christoffer
相关产品推荐
相关产品推荐

