这个SQL查询可能吗?

Cly*_*yde 1 sql t-sql sql-server pivot sql-server-2005

假设我有这些数据:

Employee  Task   IsCurrent
--------  ----   ---------
Jeff      1      Yes
Jeff      2      No
Jane      1      No
Jane      2      Yes
Jane      3      No
Jane      4      No
Jake      1      Yes
Run Code Online (Sandbox Code Playgroud)

员工有一些任务,其中一个是最新的.任务编号表示一个排序 - 他们按顺序执行任务,当他们完成最后一个任务时循环回到开头.我想查询以查看接下来的三个任务.我想要这个结果集:

Employee    CurrentTask  NextTask  NextTask2
--------    -----------  --------  ---------
Jeff        1            2         1
Jane        2            3         4
Jake        1            1         1
Run Code Online (Sandbox Code Playgroud)

这可能吗?我正在使用SQL 2005

更新:对不起,我没有说清楚任务编号不一定是后续的 - 即Mike可能实际上有任务10,23和223.所以我不能只是加入寻找下一个顺序任务编号.

OMG*_*ies 5

使用:

WITH summary AS (
   SELECT t.employee,
          t.task,
          t.iscurrent,
          ROW_NUMBER() OVER (PARTITION BY t.employee
                                 ORDER BY t.task) AS rank
     FROM TABLE t)
   SELECT a.employee,
          a.task AS current_task,
          COALESCE(b.task, y.min_task) AS next_task,
          COALESCE(c.task, y.min_task) AS next_task2
     FROM summary a
     JOIN (SELECT x.employee,
                  MIN(x.task) AS min_task
             FROM TABLE x
         GROUP BY x.employee) y ON y.employee = a.employee
LEFT JOIN summary b ON b.employee = a.employee
                   AND b.rank = a.rank + 1
LEFT JOIN summary c ON c.employee = a.employee
                   AND c.rank = a.rank + 2                   
    WHERE a.iscurrent = 'yes'
Run Code Online (Sandbox Code Playgroud)

就像我之前说过的,如果SQL Server支持LEAD/LAG功能会更容易......