Hallo ich die folgende Abfrage haben ...rekursive Abfrage in Oracle
Ich möchte eine der folgenden Datensatz haben, die nur 4 Spalten, abgefragt werden, um das Projekt zu erhalten. Die Projekte werden durch die vorherige Zeile getrennt, die nicht das gleiche Enddatum wie die aktuelle Zeile start_date hat. Die ersten drei Zeilen wären also im selben Projekt. Das zweite Projekt wären die nächsten zwei Zeilen und die Projekte 3 und 4 wären die vorletzten und letzten Zeilen.
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
So würde die Ausgabe aussieht
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
ich ein SQL Server-Architekt bin, und ich habe bereits die SQL Server-Abfrage, aber ich bin Fehler auf der Oracle-Abfrage zu bekommen. Hier ist, was ich bisher in Oracle habe.
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
Aber ich bekomme nur zwei Zeilen zurück. Ich habe die Zyklusklausel hinzugefügt, nachdem ein Fehler aufgetreten ist. Ich denke, dass ein Orakel dba mit diesem umgehen könnte? Ich benutze übrigens 11g Express.
Wissen Sie, wie Sie es in einer rekursiven SQL Server wie Abfrage verwenden würde? Mit den Anker- und rekursiven Teilen der Cte? –