使用递归 sql 查询检索邻居数据
Retrieve neighbour data by using recursive sql query
这是我的 table,我保留生产订单的数据。我想通过给@task(例如99537)参数来获取数据,
- 获取@task的Loom号
99537 机号为:101
- 获取所有后续 "ulk" 进程,直到到达另一个进程任务,按 OrderNo 列排序
"ulk" 进程是 101 织机在 99537 之后的任务是:100127,99829
如何为此编写 CTE 查询?
如果 CTE 不可能,任何解决方案也是可能的。
提前致谢..
这是使用 ROW_NUMBER()
的一种方法:
SELECT OrderNo, WeavingLoom, Task, Process
FROM (
SELECT g1.OrderNo, g1.WeavingLoom, g1.Task, g1.Process,
ROW_NUMBER() OVER (ORDER BY g1.OrderNo) -
ROW_NUMBER() OVER (PARTITION BY Process ORDER BY g1.OrderNo) AS grp
FROM GanttTable AS g1
INNER JOIN (SELECT OrderNo, WeavingLoom
FROM GanttTable
WHERE Task = 99537) AS g2
ON g1.WeavingLoom = g2.WeavingLoom AND g1.OrderNo > g2.OrderNo) AS t
WHERE grp = 0 AND Process = 'ulk'
grp
字段标识具有相同 Process
值的连续记录的孤岛。第一个岛,即紧跟在 selected-by-TaskID 记录之后的记录组,有 grp=0
。如果这条记录恰好也有 Process = 'ulk'
那么上面的查询将返回它,否则不返回任何行。
这是我的 table,我保留生产订单的数据。我想通过给@task(例如99537)参数来获取数据,
- 获取@task的Loom号 99537 机号为:101
- 获取所有后续 "ulk" 进程,直到到达另一个进程任务,按 OrderNo 列排序 "ulk" 进程是 101 织机在 99537 之后的任务是:100127,99829
如何为此编写 CTE 查询? 如果 CTE 不可能,任何解决方案也是可能的。
提前致谢..
这是使用 ROW_NUMBER()
的一种方法:
SELECT OrderNo, WeavingLoom, Task, Process
FROM (
SELECT g1.OrderNo, g1.WeavingLoom, g1.Task, g1.Process,
ROW_NUMBER() OVER (ORDER BY g1.OrderNo) -
ROW_NUMBER() OVER (PARTITION BY Process ORDER BY g1.OrderNo) AS grp
FROM GanttTable AS g1
INNER JOIN (SELECT OrderNo, WeavingLoom
FROM GanttTable
WHERE Task = 99537) AS g2
ON g1.WeavingLoom = g2.WeavingLoom AND g1.OrderNo > g2.OrderNo) AS t
WHERE grp = 0 AND Process = 'ulk'
grp
字段标识具有相同 Process
值的连续记录的孤岛。第一个岛,即紧跟在 selected-by-TaskID 记录之后的记录组,有 grp=0
。如果这条记录恰好也有 Process = 'ulk'
那么上面的查询将返回它,否则不返回任何行。