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

如何合并Employee表关联EmpId的日期字段,使带-A后缀EmpId查询返回有效日期

解决方法

可以通过修改视图vwEmployee,关联原EmpId与带"-A"后缀的EmpId,让带后缀的行自动继承原EmpId的日期值,具体有两种实现方式:

方法一:自连接方式(推荐,性能更优)

修改视图的SQL语句如下:

CREATE OR ALTER VIEW vwEmployee
AS
SELECT
    e.EmpId,
    COALESCE(e.StartDate, base.StartDate) AS StartDate,
    COALESCE(e.EndDate, base.EndDate) AS EndDate
FROM dbo.Employee e
LEFT JOIN dbo.Employee base
    ON REPLACE(e.EmpId, '-A', '') = base.EmpId

逻辑说明

  1. 用REPLACE(e.EmpId, '-A', '')提取每个EmpId的基础标识:带"-A"的EmpId会去掉后缀得到原EmpId,原EmpId处理后仍是自身。
  2. 通过左连接关联到基础标识对应的行,确保带"-A"的行能匹配到原EmpId的记录。
  3. COALESCE函数优先使用当前行的日期值,若当前行日期为NULL(即带"-A"的行),则自动取关联的原EmpId行的日期值。

方法二:子查询方式

如果更倾向于直观的条件判断,也可以用子查询实现:

CREATE OR ALTER VIEW vwEmployee
AS
SELECT
    EmpId,
    CASE
        WHEN EmpId LIKE '%-A' THEN (SELECT StartDate FROM dbo.Employee WHERE EmpId = REPLACE(EmpId, '-A', ''))
        ELSE StartDate
    END AS StartDate,
    CASE
        WHEN EmpId LIKE '%-A' THEN (SELECT EndDate FROM dbo.Employee WHERE EmpId = REPLACE(EmpId, '-A', ''))
        ELSE EndDate
    END AS EndDate
FROM dbo.Employee

逻辑说明

  1. 通过LIKE '%-A'判断当前EmpId是否为带后缀的记录。
  2. 若是带后缀的记录,通过REPLACE生成原EmpId,再子查询获取对应日期;否则直接使用当前行的日期。

修改完成后,执行select * From vwEmployee where EmpId = 'JS123-A'就能返回原EmpIdJS123对应的日期值,原EmpId的查询结果不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:05:00