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

如何基于列值比较从指定列提取对应值(SQL实现)

问题描述

我有一张结构如下的表:

PartRefPartDate
12340112340122072024
12340112340224072024
23450123450120062024
34560134560110052024

需求是:检查PartRef列的值是否存在于Part列中,然后将对应的Date值提取到新列RelDate中。例如当PartRef=123401时,两行的RelDate都应为22072024。

预期结果如下:

PartRefPartDateRelDate
1234011234012207202422072024
1234011234022407202422072024
2345012345012006202420062024
3456013456011005202410052024

我尝试过子查询、EXIST和IN,但无法获取特定行的正确日期,该如何实现?

解决方案

方法1:自连接(Self Join)

将表与自身关联,匹配PartRef和Part相等的行,直接获取对应的基准日期:

SELECT 
    t1.PartRef,
    t1.Part,
    t1.Date,
    t2.Date AS RelDate
FROM 
    your_table t1
INNER JOIN 
    your_table t2 ON t1.PartRef = t2.Part;

方法2:窗口函数(Window Function)

如果每个PartRef仅对应一条Part匹配记录(如示例场景),用窗口函数分组提取更简洁:

SELECT 
    PartRef,
    Part,
    Date,
    MAX(CASE WHEN PartRef = Part THEN Date END) OVER (PARTITION BY PartRef) AS RelDate
FROM 
    your_table;

补充说明

  • 自连接方式适用于PartRef对应多个Part匹配的场景,若存在多条匹配,可通过MIN()/MAX()聚合函数筛选目标日期;
  • 窗口函数方式无需关联表,直接通过分组逻辑提取基准日期,性能更优且代码简洁。

内容的提问来源于stack exchange,提问作者jagdfuerst

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:25:57