You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于两个数据集变量值匹配生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:39:57