|
|
1
5
就像我前面说的,如果SQLServer支持超前/滞后函数,会更容易。。。 |
|
|
2
1
如果您只对下一个和之后的一个感兴趣,可以使用以下方法: SELECT t.employee,
t.task AS current_task,
t1.task AS next_task,
t2.task AS next_task_2
FROM tasks t
LEFT JOIN tasks t1 ON t1.task = t.task + 1 AND t1.employee = t.employee
LEFT JOIN tasks t2 ON t2.task = t1.task + 1 AND t2.employee = t1.employee
WHERE t.isCurrent = 'yes'
|
|
|
3
0
如果存储过程包含以下步骤,应该不会太糟糕 使用Employee、CurrentTask、NextTask和NextTask2列创建临时表 这是一个简单的SQL语句。。。你可以把第一步和第二步结合起来。
|
|
|
4
0
SELECT e.Employee, e.Task AS CurrentTask,
(
SELECT TOP 1 e1.Task FROM dbo.Employees AS e1 WHERE e1.Employee=e.Employee AND e1.Task > e.Task ORDER BY e1.Task ASC
) AS NextTask,
(
SELECT TOP 1 e2.Task FROM dbo.Employees AS e2 WHERE e2.Employee=e.Employee AND e2.Task > (
SELECT TOP 1 e1.Task FROM dbo.Employees AS e1 WHERE e1.Employee=e.Employee AND e1.Task > e.Task ORDER BY e1.Task ASC
) ORDER BY e2.Task ASC
) AS NextTask2
FROM dbo.Employees AS e
WHERE e.IsCurrent = 'Yes'
另外,也许PIVOT可以做到,但我并不擅长。 |
|
|
5
0
这是一个由两部分组成的问题。首先,必须解决模数问题(按顺序列出任务,从当前任务开始): 步骤1:构建一个结果如下的查询(我已经根据您的编辑修改了数据)
步骤2:与原始查询进行联合
|