1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as mni
SQL>
SQL> WITH DATA AS
2 (
3 SELECT 0 AS id, NULL AS parent_id, 0 AS delai FROM dual union ALL
4 SELECT 1 AS id, 0 AS parent_id, 1 AS delai FROM dual union ALL
5 SELECT 2 AS id, 0 AS parent_id, 2 AS delai FROM dual union ALL
6 SELECT 11 AS id, 1 AS parent_id, 2 AS delai FROM dual union ALL
7 SELECT 21 AS id, 2 AS parent_id, 3 AS delai FROM dual union ALL
8 SELECT 100 AS id, NULL AS parent_id, 0 AS delai FROM dual union ALL
9 SELECT 101 AS id, 100 AS parent_id, 7 AS delai FROM dual union ALL
10 SELECT 102 AS id, 100 AS parent_id, 1 AS delai FROM dual union ALL
11 SELECT 1011 AS id, 101 AS parent_id, 4 AS delai FROM dual union ALL
12 SELECT 1021 AS id, 102 AS parent_id, 8 AS delai FROM dual
13 ),
14 Calc_Data As
15 (
16 SELECT id, parent_id, (SELECT Sum(delai)
17 FROM DATA b
18 WHERE id IN (SELECT id
19 FROM DATA c
20 connect BY prior id = parent_id
21 start WITH id = a.id)
22 ) Sum_delai
23 FROM DATA a
24 )
25 Select id, parent_id,
26 Case When parent_id Is Null Then (Select Max(Sum_delai)
27 From Calc_Data b
28 Where parent_id = a.id)
29 Else Sum_Delai
30 End delai
31 From Calc_data a
32 /
ID PARENT_ID DELAI
---------- ---------- ----------
0 5
1 0 3
2 0 5
11 1 2
21 2 3
100 11
101 100 11
102 100 9
1011 101 4
1021 102 8
10 rows selected
SQL> |
Partager