Récapituler des données dans une vue
Bonjour,
J'ai une problématique au boulot bien austère, que je préfère vous illustrer en prenant exemple sur un jeu :
Prenez une table joueur avec id,debut et fin
une table paysan avec id, statut, debut et fin
une table mage avec id,statut, debut et fin
une table guerrier avec id,statut,debut et fin
Le joueur 4 arrive le 01/01/2012 et part le 31/12
Il est dans la table paysan du 07/05 au 30/06, dans la table mage du 01/07 au 30/09, dans la table guerrier du 01/10 au 04/11.
On aimerait dans une vue pouvoir lire à son sujet
4 joueur 01/01 06/05
4 paysan 07/05 30/06
4 mage 01/07 30/09
4 guerrier 01/10 04/11
4 joueur 05/11 31/12
Avec autant de tuples que de statut (ou non statut=joueur) sur une période. Dans tous les cas, on veut couvrir l'année du 01/01 au 31/12.
J'ai essayé ceci, mais bien sûr, les dates pour joueur ne sont pas bonnes.
Code:
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
| select joueur.id,"joueur" as statut,joueur.debut,joueur.fin
from joueur
where joueur.fin>="2012-01-01" and joueur.debut<="2012-12-31"
union
select paysan.id,paysan.statut,paysan.debut,paysan.fin
from joueur
inner join paysan
on joueur.id=paysan.id
and joueur.fin>=paysan.debut and joueur.debut<=paysan.fin
where joueur.fin>="2012-01-01" and joueur.debut<="2012-12-31"
union
select mage.id,mage.statut,mage.debut,mage.fin
from joueur
inner join mage
on joueur.id=mage.id
and joueur.fin>=mage.debut and joueur.debut<=mage.fin
where joueur.fin>="2012-01-01" and joueur.debut<="2012-12-31"
union
select guerrier.id,guerrier.statut,guerrier.debut,guerrier.fin
from joueur
inner join guerrier
on joueur.id=guerrier.id
and joueur.fin>=guerrier.debut and joueur.debut<=guerrier.fin
where joueur.fin>="2012-01-01" and joueur.debut<="2012-12-31"
group by id,statut,debut,fin |