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
|
with etape (etape_id, nom_ville) as (
select 1, 'Paris' from dual
union all
select 2, 'Lyon' from dual
union all
select 3, 'Marseille' from dual
),
train (train_id, nom_train, nb_places) as (
select 1, 'Train 1', 100 from dual
union all
select 2, 'Train 2', 50 from dual
),
trainetape (trainetape_id, train_id, etape_id, heure) as (
select 1, 1, 1, 0 from dual
union all
select 2, 1, 2, 2 from dual
union all
select 3, 1, 3, 4 from dual
union all
select 4, 2, 3, 0 from dual
union all
select 5, 2, 1, 3 from dual
),
reservation (reservation_id, depart_id, arrivee_id, nb_places) as (
select 1, 1, 3, 20 from dual
union all
select 2, 1, 2, 70 from dual
union all
select 3, 2, 3, 50 from dual
union all
select 4, 4, 5, 40 from dual
)
select t.train_id, t.nom_train, t.nb_places, te.trainetape_id, te.heure, e.nom_ville, sum(m.nb_places) monte, sum(d.nb_places) descend
from train t
inner join trainetape te on te.train_id = t.train_id
inner join etape e on e.etape_id = te.etape_id
left outer join reservation m on m.depart_id = te.trainetape_id
left outer join reservation d on d.arrivee_id = te.trainetape_id
group by t.train_id, t.nom_train, t.nb_places, te.trainetape_id, te.heure, e.nom_ville
order by t.train_id, te.heure; |
Partager