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
相关产品推荐
相关产品推荐

