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
|
with req(id_utilisateur, id_logiciel)
as (select 1, 'LOGICIEL A' from dual union all
select 2, 'LOGICIEL A' from dual union all
select 2, 'LOGICIEL B' from dual union all
select 3, 'LOGICIEL C' from dual union all
select 4, 'LOGICIEL B' from dual union all
select 4, 'LOGICIEL D' from dual
),
liste_logiciels(id_logiciel)
as (select 'LOGICIEL A' from dual union all
select 'LOGICIEL B' from dual union all
select 'LOGICIEL C' from dual union all
select 'LOGICIEL D' from dual union all
select 'LOGICIEL E' from dual union all
select 'LOGICIEL F' from dual
),
logiciels_utilisateurs
as (select r.id_utilisateur, nvl2(r.id_logiciel, 1, 0) logiciel_present, l.id_logiciel
from req r
partition by (r.id_utilisateur)
right join liste_logiciels l
on (r.id_logiciel = l.id_logiciel)
)
select *
from logiciels_utilisateurs
pivot (sum(logiciel_present) for id_logiciel in ('LOGICIEL A' as logiciel_A,
'LOGICIEL B' as logiciel_B,
'LOGICIEL C' as logiciel_C,
'LOGICIEL D' as logiciel_D,
'LOGICIEL E' as logiciel_E,
'LOGICIEL F' as logiciel_F
)
)
order by 1;
ID_UTILISATEUR LOGICIEL_A LOGICIEL_B LOGICIEL_C LOGICIEL_D LOGICIEL_E LOGICIEL_F
-------------- ---------- ---------- ---------- ---------- ---------- ----------
1 1 0 0 0 0 0
2 1 1 0 0 0 0
3 0 0 1 0 0 0
4 0 1 0 1 0 0
4 rows selected. |
Partager