2015-10-19 125 views
0

Data in table使用递归SQL查询

这是我的表,我把数据生产订单获取相邻数据。我想通过给@task(如99537)的参数,因为这得到数据,

  1. 获取@task 的织机数量为99537织机数量为:101
  2. 获取,直到到达所有下面的“天狗”的过程通过OrderNo列 与订货另一个进程的任务“天狗”过程theese为101织机后,99537的任务是:100127,99829

这里是sqlfiddle link

如何写一个CTE查询˚F或这个?如果CTE不可能,任何解决方案也是可能的。

在此先感谢..

+0

问题中提到的示例需要的输出是什么? –

+0

为什么互联网上已有的过多示例可以帮助您? –

+0

对于复杂的解释感到抱歉。在我的问题中有一个sqlfiddle链接。如果你看看结果,我只需要显示顺序的前两行。 – Rapunzo

回答

1

下面是使用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值的连续记录的岛屿。第一个岛,即紧接在Task -ID选择记录之后的记录组,具有grp=0。如果这部分记录发生也具有Process = 'ulk',那么它由上述查询返回,否则不返回任何行。

Demo here

+0

非常感谢,它工作完美,即使没有cte!现在我正在考虑 – Rapunzo