簡體   English   中英

SQL Server - 根據列值如何跨行更改來計算行數

[英]SQL Server - Count Rows based on How Column values have changed across rows

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

TBL_EMPLOYEE

在此處輸入圖片說明

現在我需要為每個員工選取第一個(最小)和最后一個(最大)RecordID 並執行以下操作:

  1. 如果第一條記錄是 USA 而 Last 是 Canada :則將員工標記為“美國到加拿大”。
  2. 如果最后一條記錄是 USA 而第一個記錄是 Canada :然后將員工標記為“加拿大到美國”。

我的最終目標是制作下表 - 它將顯示跨越兩個國家的員工人數。

TBL_MIGRATION

在此處輸入圖片說明

如何在 SQL 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;

First_value & Last_value 自 2012 年或更高版本開始可用,如果您使用較低版本運行,則可以使用apply

select movement, count(*)
from (select distinct t.employee, 
             concat(t1.workfrom, ' to ', t11.workfrom) as movement
      from table t cross apply
           ( select top (1) t1.*
             from table t1
             where t1.employee = t.employee 
             order by t1.id 
           ) t1 cross apply
           ( select top (1) t11.*
             from table t11
             where t11.employee = t.employee 
             order by t11.id desc 
           ) t11
      where t1.workfrom <> t11.workfrom
     ) t
group by movement;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM