求助:基于两个数据集变量值匹配生成Pass/Fail标记的实现
数据集逐行校验匹配并标记需求
我有两个数据集,需要逐行校验指定变量值是否匹配:若指定变量值全部匹配则标记为Pass,否则标记为Fail。需将该标记追加到Dataset 1中,且两个数据集的变量名可能不同(如Name与Initial),但对应值需匹配才判定为Pass。我曾尝试用Case结合Join的方法实现,但遇到问题,求技术帮助。
现有数据集
Dataset 1
Name Address Age 1 John Carry 66 2 Andy NYC 32 3. Sam LA 42
Dataset 2
Initial Address Age 1 John Carry 56 2 Andy NV 32 3. Sam LA 42
期望最终数据集
Dataset Final Name Address Age Flag 1 John Carry 66 Fail 2 Andy NYC 32 Fail 3. Sam LA 42 Pass
解决方案(SQL实现)
核心思路是先按行标识关联两个数据集,再通过CASE语句判断所有指定变量是否匹配:
1. 已有行标识的情况
如果两个数据集自带唯一行号(如ID、序号),直接关联后判断:
SELECT d1.Name, d1.Address, d1.Age, CASE -- 明确变量对应关系:Name匹配Initial,Address、Age直接匹配 WHEN d1.Name = d2.Initial AND d1.Address = d2.Address AND d1.Age = d2.Age THEN 'Pass' ELSE 'Fail' END AS Flag FROM Dataset1 d1 JOIN Dataset2 d2 ON d1.行号列 = d2.行号列; -- 替换为实际行标识字段,比如ID
2. 无行标识的情况
如果数据集没有行号,先通过ROW_NUMBER()函数生成临时行号再关联:
WITH Dataset1_RN AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn FROM Dataset1 ), Dataset2_RN AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn FROM Dataset2 ) SELECT d1.Name, d1.Address, d1.Age, CASE WHEN d1.Name = d2.Initial AND d1.Address = d2.Address AND d1.Age = d2.Age THEN 'Pass' ELSE 'Fail' END AS Flag FROM Dataset1_RN d1 JOIN Dataset2_RN d2 ON d1.rn = d2.rn;
关键注意事项
- 确保行关联的准确性:必须保证两个数据集的行顺序严格对应,否则会出现匹配错位。
- 变量对应关系需明确:不同名的变量要在
CASE条件中写出对应逻辑(如d1.Name = d2.Initial)。
内容的提问来源于stack exchange,提问作者Ezio_Auditore
相关产品推荐
相关产品推荐

