首页 > 解决方案 > SQL Server - 根据列值如何跨行更改来计算行数

问题描述

我在 SQL Server DB 中有一个表,如下所示:

TBL_EMPLOYEE

在此处输入图像描述

现在我需要为每个员工获取第一个(最小)和最后一个(最大)RecordID 并执行以下操作:

  1. 如果第一条记录是美国,最后一条是加拿大:然后将员工标记为“美国到加拿大”。
  2. 如果最后一条记录是 USA 并且首先是 Canada :然后将员工标记为“Canada to USA”。

我的最终目标是制作下表 - 这将显示跨越两个国家的员工数量。

TBL_MIGRATION

在此处输入图像描述

如何在 SQL Server 中实现这一点?

标签: sqlsql-server

解决方案


听起来您想要每个员工的第一行和最后一行。然后您可以跟踪整体运动:

select first_workfrom, last_workfrom, count(*)
from (select t.*,
             first_value(workfrom) over (partition by employee order by recordid) as first_workfrom,
             first_value(workfrom) over (partition by employee order by recordid desc) as last_workfrom
      from t
     ) t
group by first_workfrom, last_workfrom
having first_workfrom <> last_workfrom;

推荐阅读