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
| WITH dossier AS
( SELECT 1 AS ID_DOSSIER, NULL AS ID_DOSSIER_PERE, 'T' AS ETAT_DOSSIER FROM DUAL
UNION ALL
SELECT 11 AS ID_DOSSIER, 1 AS ID_DOSSIER_PERE, 'T' AS ETAT_DOSSIER FROM DUAL
UNION ALL
SELECT 12 AS ID_DOSSIER, 1 AS ID_DOSSIER_PERE, 'T' AS ETAT_DOSSIER FROM DUAL
UNION ALL
SELECT 2 AS ID_DOSSIER, NULL AS ID_DOSSIER_PERE, 'T' AS ETAT_DOSSIER FROM DUAL
UNION ALL
SELECT 21 AS ID_DOSSIER, 2 AS ID_DOSSIER_PERE, 'T' AS ETAT_DOSSIER FROM DUAL
UNION ALL
SELECT 22 AS ID_DOSSIER, 2 AS ID_DOSSIER_PERE, 'E' AS ETAT_DOSSIER FROM DUAL
)
select ID_DOSSIER, ID_DOSSIER_PERE , ETAT_DOSSIER , tot_doss_lies, tot_doss_clos
from (
select ID_DOSSIER, ID_DOSSIER_PERE , ETAT_DOSSIER
, count(*) over (partition by ID_DOSSIER_PERE) tot_doss_lies
, count(*) over (partition by ID_DOSSIER_PERE, ETAT_DOSSIER) tot_doss_clos
from (
select ID_DOSSIER, NVL(ID_DOSSIER_PERE, ID_DOSSIER) ID_DOSSIER_PERE, ETAT_DOSSIER
from dossier
start with ID_DOSSIER_PERE is null
connect by prior ID_DOSSIER = ID_DOSSIER_PERE
order by 1, ETAT_DOSSIER
)
)
where tot_doss_lies=tot_doss_clos; |
Partager