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
| with t as (select 1 as no_cas, 3 as quest, 'A' as reponse from dual union all
select 1 as no_cas, 4 as quest, 'A' as reponse from dual union all
select 1 as no_cas, 4 as quest, 'C' as reponse from dual union all
select 1 as no_cas, 5 as quest, 'B' as reponse from dual union all
select 1 as no_cas, 6 as quest, 'B' as reponse from dual union all
select 2 as no_cas, 7 as quest, 'C' as reponse from dual union all
select 2 as no_cas, 8 as quest, 'C' as reponse from dual union all
select 2 as no_cas, 9 as quest, 'D' as reponse from dual union all
select 3 as no_cas, 10 as quest, 'A' as reponse from dual union all
select 3 as no_cas, 11 as quest, 'C' as reponse from dual ),
v as (select t.no_cas, t.quest, t.reponse, t.quest||t.reponse as quest_reponse, ordre_quest.quest_suivante
from t,
(select no_cas, quest, lead (quest) over (partition by no_cas order by quest) quest_suivante
from (select distinct t.no_cas, t.quest
from t)) ordre_quest
where t.no_cas = ordre_quest.no_cas
and t.quest = ordre_quest.quest ),
v_hier as (select no_cas, quest, reponse, quest_reponse, level niv,
ltrim(sys_connect_by_path(quest_reponse, '-'), '-') combinaison
from v
connect by prior quest_suivante = quest
and prior no_cas = no_cas)
select no_cas, combinaison
from (
select v_hier.no_cas, v_hier.quest, v_hier.reponse, v_hier.quest_reponse, v_hier.combinaison, v_hier.niv, max (v_hier.niv) over (partition by v_hier.no_cas) max_niv
from v_hier)
where niv = max_niv;
NO_CAS COMBINAISON
---------- --------------------
1 3A-4A-5B-6B
1 3A-4C-5B-6B
2 7C-8C-9D
3 10A-11C |
Partager