2015-10-19 161 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