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

SQL Server中如何将两行数据合并为一行(避免使用临时表)

在SQL Server中合并两行数据为一行(无需临时表)

示例数据

EmpID  Start    Title                 Row   
-----------------------------------------
  123  2021     'data architect'       2
  123  2022     'I.T manager'          1

期望结果

EmpID  Start    Title                 Previous_title
-----------------------------------------------------
  123  2022     'I.T manager'          Data Architect

解决方案

方法1:使用LAG()窗口函数(推荐)

利用窗口函数直接获取同一员工的上一条记录,无需临时表,代码简洁高效:

SELECT 
    EmpID,
    Start,
    Title,
    -- 按EmpID分组,Row升序排列,取上一行的Title作为Previous_title
    LAG(Title) OVER (PARTITION BY EmpID ORDER BY [Row]) AS Previous_title
FROM YourTableName
WHERE [Row] = 1; -- 仅保留最新的那一行记录

方法2:使用自连接

如果对窗口函数不熟悉,也可以通过表自连接实现:

SELECT 
    curr.EmpID,
    curr.Start,
    curr.Title,
    prev.Title AS Previous_title
FROM YourTableName curr
-- 关联同一员工的上一条记录(Row=2)
JOIN YourTableName prev 
    ON curr.EmpID = prev.EmpID 
    AND curr.[Row] = 1 
    AND prev.[Row] = 2;

通用扩展(不依赖Row字段)

如果Row字段是根据Start年份生成的,也可以直接按Start排序,不需要依赖Row字段:

SELECT 
    EmpID,
    Start,
    Title,
    LAG(Title) OVER (PARTITION BY EmpID ORDER BY Start) AS Previous_title
FROM YourTableName
WHERE Start = (SELECT MAX(Start) FROM YourTableName WHERE EmpID = YourTableName.EmpID);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:36:23