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

如何使用TSQL无需子查询统计员工的唯一岗位变更次数?

实现方法(无需子查询)

当然可以!咱完全能用TSQL的窗口函数搞定这个需求,根本不需要子查询。结合你给的样例,先明确核心需求:每个员工的jobcount是他经历的岗位变更总次数(包括切换回原岗位的情况)——比如tim三次变更(哪怕有重复岗位)就显示3,joy两次都是同一岗位没切换就显示1,rob四次不同岗位切换就显示4。

直接上可用的TSQL代码:

SELECT 
    name,
    job,
    -- 统计员工的岗位变更次数(相邻岗位不同的次数)+1,得到总状态数
    COUNT(CASE WHEN job <> LAG(job) OVER (PARTITION BY name ORDER BY (SELECT NULL)) THEN 1 END) OVER (PARTITION BY name) + 1 AS jobcount
FROM 
    YourTableName; -- 替换成你的实际表名

代码细节解释:

  • LAG(job) OVER (PARTITION BY name ORDER BY (SELECT NULL)):这个窗口函数会拉取当前员工上一条记录的岗位。这里用ORDER BY (SELECT NULL)是因为你的原始数据没提供时间字段,只能按现有顺序处理;如果你的表有变更时间(比如change_date),一定要换成这个字段排序,结果才会准确!
  • CASE WHEN job <> LAG(...) THEN 1 END:当当前岗位和上一次不一样时,标记为1,代表一次有效变更。
  • COUNT(...) OVER (PARTITION BY name):统计每个员工的总变更次数。
  • 最后加1是因为要把初始的岗位状态算进去,这样得到的数值就和你给出的样例完全匹配了。

补充:如果需求是统计不同岗位的数量

要是你其实想统计每个员工有多少个不同的岗位(比如tim是2,joy是1,rob是4),那代码更简单:

SELECT 
    name,
    job,
    COUNT(DISTINCT job) OVER (PARTITION BY name) AS jobcount
FROM 
    YourTableName;

内容的提问来源于stack exchange,提问作者R.Merritt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:17:52