嗨,我有以下查詢...Oracle中的遞歸查詢
我想要一個下面的數據集,它只有4列,被查詢以獲得項目。項目由前一行分隔,與當前行start_date不具有相同的end_date。所以前三行將在同一個項目中。第二個項目是下兩行,項目3和4將是倒數第二和最後一行。
DAYS,TASK_ID,START_DATE,END_DATE
NULL,1,10/1/2015,10/2/2015
0,2,10/2/2015,10/3/2015
0,3,10/3/2015,10/4/2015
9,4,10/13/2015,10/14/2015
0,5,10/14/2015,10/15/2015
13,6,10/28/2015,10/29/2015
1,7,10/30/2015,10/31/2015
所以輸出會是什麼樣子
PROJECT,DAYS,TASK_ID,START_DATE,END_DATE
1,NULL,1,10/1/2015,10/2/2015
1,0,2,10/2/2015,10/3/2015
1,0,3,10/3/2015,10/4/2015
2,9,4,10/13/2015,10/14/2015
2,0,5,10/14/2015,10/15/2015
3,13,6,10/28/2015,10/29/2015
4,1,7,10/30/2015,10/31/2015
我是一個SQL Server的建築師,我已經做了SQL Server查詢,但我在Oracle查詢得到錯誤。這是我迄今在Oracle中所擁有的。
WITH projectsNumbered (Project, Task_Id, Start_Date, End_Date, Days) AS
(SELECT 1 As "Project"
, Task_Id
, Start_Date
, End_Date
, Days
FROM daysBetweenTasks
WHERE Task_Id = 1
UNION ALL
SELECT
CASE WHEN COALESCE(pN.Days,0) = 0 THEN pN.Project
ELSE pN.Project + 1
END AS "Project"
, pN.Task_Id
, pN.Start_Date
, pN.End_Date
, pN.Days
FROM projectsNumbered pN
JOIN daysBetweenTasks d on p.task_Id = pN.task_Id + 1
)
--SEARCH DEPTH FIRST BY Task_Id SET order1
CYCLE Task_Id SET cycle TO '1' DEFAULT 0
SELECT *
FROM projectsNumbered
但我只得到兩行返回。我在發生錯誤後添加了Cycle Clause。我認爲oracle dba可能可以處理這個問題?順便說一句,我正在使用11g Express。
你知道你將如何使用它裏面像查詢遞歸的SQL Server?用cte的錨和遞歸部分? –